Builder2 method

Widget Builder2({
  1. Key? key,
  2. required ValueAndChildBuilder<T> builder,
  3. Widget child = const SizedBox.shrink(),
  4. ErrorBuilder? errorBuilder,
  5. WidgetBuilder? loadingBuilder,
  6. LoadingBuilderToSliver? loadingBuilderToSliver,
  7. ErrorBuilderToSliver? errorBuilderToSliver,
  8. bool sliver = false,
})

快速构建一个ValueListenableBuilder

  • 内部类型为 AsyncData<T>
  • sliver 是否对配置信息启用sliver 转换
    ignore: non_constant_identifier_names

Implementation

Widget Builder2({
  Key? key,
  required ValueAndChildBuilder<T> builder,
  Widget child = const SizedBox.shrink(),
  ErrorBuilder? errorBuilder,
  WidgetBuilder? loadingBuilder,
  LoadingBuilderToSliver? loadingBuilderToSliver,
  ErrorBuilderToSliver? errorBuilderToSliver,
  bool sliver = false,
}) {
  return ValueListenableBuilder<AsyncData<T>>(
    key: key,
    valueListenable: this,
    builder: (context, value, _) {
      return value.when(
        loading: () {
          loadingBuilder ??= context.config.loadingBuilder;
          if (sliver) {
            loadingBuilderToSliver ??= context.config.loadingBuilderToSliver;
            return loadingBuilderToSliver!(
                context, widgets.Builder(builder: loadingBuilder!));
          } else {
            return loadingBuilder!(context);
          }
        },
        error: (error, stackTrace) {
          errorBuilder ??= context.config.errorBuilder;
          if (sliver) {
            errorBuilderToSliver ??= context.config.errorBuilderToSliver;
            return errorBuilderToSliver!(
                context,
                widgets.Builder(
                    builder: (context) =>
                        errorBuilder!(context, error, stackTrace)),
                error,
                stackTrace);
          } else {
            return errorBuilder!(context, error, stackTrace);
          }
        },
        value: (data) => builder(context, data, child),
      );
    },
    child: child,
  );
}