我已经找到了如何在构建小部件时等待2个不同的未来的答案,但这些都是相同类型的。
但是如果firstFuture()
和secondFuture()
返回不同的值类型--例如int和String(或者像我的用例中那样返回不同的类),也有可能吗?AsyncSnapshot<List<bool>> snapshot
中的bool
对我来说是一个挑战...
FutureBuilder(
future: Future.wait([
firstFuture(), // Future<bool> firstFuture() async {...}
secondFuture(),// Future<bool> secondFuture() async {...}
//... More futures
]),
builder: (
context,
// List of booleans(results of all futures above)
AsyncSnapshot<List<bool>> snapshot,
){
// Check hasData once for all futures.
if (!snapshot.hasData) {
return CircularProgressIndicator();
}
// Access first Future's data:
// snapshot.data[0]
// Access second Future's data:
// snapshot.data[1]
return Container();
}
);
我还发现了另一个具有不同类型的answer,但它适用于函数而不是类
List<Foo> foos;
List<Bar> bars;
List<FooBars> foobars;
await Future.wait<void>([
downloader.getFoos().then((result) => foos = result),
downloader.getBars().then((result) => bars = result),
downloader.getFooBars().then((result) => foobars = result),
]);
processData(foos, bars, foobars);
2条答案
按热度按时间5rgfhyps1#
你可以使用Object作为这两个方法的最小公共返回值:
但是您必须将结果
List<Object>
的条目转换回您认为应该是的内容。就我个人而言,我更喜欢你已经发现的方法,只返回最小的future,一个
Future<void>
,并将其写入方法内部的相应变量。这也不是完美的,但它保持了类型安全。41zrol4v2#
下面的答案可能会帮助你
在包内使用
FutureGroup
代码:
输出: