我想知道是否有一种方法可以将Future Builder与FutureOr<T>类型的future-参数一起使用?
Future Builder
FutureOr<T>
future
s71maibg1#
最简单的方法是始终将FutureOr<T>转换为Future<T>。The Future class有很多构造函数可以做到这一点:
Future<T>
Future
Future<T>.new
Future<T>.microtask
Future<T>.sync
Future<T>.value
它们中的任何一个都应该可以工作,但是如果我使用Future<T>.value或Future<T>.new:
FutureBuilder(future: Future.value(maybeFuture), ...)
如果不希望这样(等待从现有T创建的Future<T>需要额外的事件循环迭代),那么创建自己的FutureOrBuilder小部件非常简单,它类似于FutureBuilder,但如果可能的话,它会同步调用AsyncWidgetBuilder回调:
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, ); } } }
1条答案
按热度按时间s71maibg1#
最简单的方法是始终将
FutureOr<T>
转换为Future<T>
。TheFuture
class有很多构造函数可以做到这一点:Future<T>.new
Future<T>.microtask
Future<T>.sync
Future<T>.value
它们中的任何一个都应该可以工作,但是如果我使用
Future<T>.value
或Future<T>.new
:如果不希望这样(等待从现有
T
创建的Future<T>
需要额外的事件循环迭代),那么创建自己的FutureOrBuilder
小部件非常简单,它类似于FutureBuilder
,但如果可能的话,它会同步调用AsyncWidgetBuilder
回调: