flutter 我可以使用FutureBuilder和FutureOr类型的值吗< T>?

rkkpypqq  于 2023-06-07  发布在  Flutter
关注(0)|答案(1)|浏览(159)

我想知道是否有一种方法可以将Future BuilderFutureOr<T>类型的future-参数一起使用?

s71maibg

s71maibg1#

最简单的方法是始终将FutureOr<T>转换为Future<T>The Future class有很多构造函数可以做到这一点:

它们中的任何一个都应该可以工作,但是如果我使用Future<T>.valueFuture<T>.new

FutureBuilder(future: Future.value(maybeFuture), ...)

如果不希望这样(等待从现有T创建的Future<T>需要额外的事件循环迭代),那么创建自己的FutureOrBuilder小部件非常简单,它类似于FutureBuilder,但如果可能的话,它会同步调用AsyncWidgetBuilder回调:

class FutureOrBuilder<T> extends StatelessWidget {
  final FutureOr<T>? futureOrValue;

  final T? initialData;

  final AsyncWidgetBuilder<T> builder;

  const FutureOrBuilder({
    super.key,
    FutureOr<T>? future,
    this.initialData,
    required this.builder,
  }) : futureOrValue = future;

  @override
  Widget build(BuildContext context) {
    final futureOrValue = this.futureOrValue;
    if (futureOrValue is T) {
      return builder(
        context,
        AsyncSnapshot.withData(ConnectionState.done, futureOrValue),
      );
    } else {
      return FutureBuilder(
        future: futureOrValue,
        initialData: initialData,
        builder: builder,
      );
    }
  }
}

相关问题