attach method

  1. @override
Widget? attach(
  1. BuildContext context,
  2. LoaderViewController<T> controller
)
override

Implementation

@override
Widget? attach(BuildContext context, LoaderViewController<T> controller) {
  if (connection) {
    if (stream != null) {
      return StreamBuilder(
        stream: stream?.call(),
        builder: (context, snapshot) {
          controller.data = snapshot.data;
          var state = LoadingState.from(snapshot);
          Widget? child;
          if (state.isLoading) {
            child = onLoading?.call(context, controller);
          } else if (state.isNullable) {
            child = onNullable?.call(context, controller);
          } else {
            return onLoaded(context, controller);
          }
          return child ?? onLoaded(context, controller);
        },
      );
    } else {
      return FutureBuilder(
        future: future?.call(),
        builder: (context, snapshot) {
          controller.data = snapshot.data;
          var state = LoadingState.from(snapshot);
          Widget? child;
          if (state.isLoading) {
            child = onLoading?.call(context, controller);
          } else if (state.isNullable) {
            child = onNullable?.call(context, controller);
          } else {
            return onLoaded(context, controller);
          }
          return child ?? onLoaded(context, controller);
        },
      );
    }
  } else {
    return onFailed?.call(context, controller) ??
        onLoaded(context, controller);
  }
}