能否将FutureBuilder与FutureOr<T>类型的参数配合使用?
如何在FutureBuilder中使用FutureOr类型的future参数?
当然可以,核心思路是把FutureOr<T>类型转换为Future<T>,因为FutureBuilder的future参数要求是Future<T>?类型。FutureOr<T>本身是联合类型,既可以是T同步值,也可以是Future<T>异步对象,我们可以通过以下方式适配:
用
Future.value()直接包装
Dart的Future.value()方法会自动处理两种情况:如果传入的是T类型的同步值,它会返回一个已完成的Future,值就是该同步值;如果传入的本身就是Future<T>,则直接返回这个Future。完美适配FutureBuilder的参数要求。示例代码:
// 可以是同步值,也可以是异步Future FutureOr<String> myFutureOr = "同步返回的文本"; // 或者 myFutureOr = Future.delayed(Duration(seconds: 1), () => "异步返回的文本"); @override Widget build(BuildContext context) { return FutureBuilder<String>( future: Future.value(myFutureOr), builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.done) { if (snapshot.hasData) { return Text(snapshot.data!); } else if (snapshot.hasError) { return Text('出错了: ${snapshot.error}'); } } return CircularProgressIndicator(); }, ); }封装工具函数(简化重复代码)
如果需要频繁处理FutureOr<T>转Future<T>,可以封装一个工具函数:Future<T> toFuture<T>(FutureOr<T> value) => Future.value(value);使用时直接调用:
future: toFuture(myFutureOr),处理空值场景
如果FutureOr<T>可能为null,结合null-aware操作符处理即可:FutureOr<String>? nullableFutureOr; // 传给FutureBuilder时 future: nullableFutureOr != null ? Future.value(nullableFutureOr) : null,
内容的提问来源于stack exchange,提问作者ImNoBotPleaseDontDeleteMe
相关产品推荐
相关产品推荐

