Flutter Dart Future。等待多个Future并返回不同类型的结果
我正在使用flatter从服务器下载3组不同的数据,然后对所有3组数据进行处理。我可以这样做:Flutter Dart Future。等待多个Future并返回不同类型的结果,flutter,asynchronous,dart,concurrency,future,Flutter,Asynchronous,Dart,Concurrency,Future,我正在使用flatter从服务器下载3组不同的数据,然后对所有3组数据进行处理。我可以这样做: List<Foo> foos = await downloader.getFoos(); List<Bar> bars = await downloader.getBars(); List<FooBars> foobars = await downloader.getFooBars(); processData(foos, bars, foobars); Lis
List<Foo> foos = await downloader.getFoos();
List<Bar> bars = await downloader.getBars();
List<FooBars> foobars = await downloader.getFooBars();
processData(foos, bars, foobars);
List foos=wait downloader.getFoos();
List bar=wait downloader.getbar();
List foobars=wait downloader.getFooBars();
processData(foos、bar、foobars);
但我更喜欢并行异步下载所有3个数据集。我见过Dart有这样一个:
未来等待(
不可预测的未来{
布尔:错误,
空洞清理(
成功价值
)
})
但是,看起来这将只返回相同类型(T)的值。我有3种不同的类型,所以我不知道如何使用它来找回我的3个数据集
实现这一目标的最佳替代方法是什么
谢谢 我认为不可能以超好的方式来做。你所能做的就是这样:
void main()异步{
列表结果=等待未来。等待([
getStringData(),
getIntData(),
]);
打印(结果[0]);
打印(结果[1]);
}
未来的getStringData(){
返回Future.value([“a”,“b”]);
}
未来的getIntData(){
返回未来值([1,2]);
}
嗯,T型是一种泛型
你知道你的类型,所以你可以和他们一起工作
如果您使用的是FutureBuilder
,则可以使用此选项访问不同的结果。(与您在未来中放置它们的顺序相同。等待方法)
snapshot.data[0]//可能是类型列表
snapshot.data[1]//可能是类型列表
snapshot.data[2]//可能是字符串类型
您需要将您的每个未来
调整为一种常见的未来
。您可以使用Future
:
列出foo;
列表栏;
列出食物栏;
等待未来([
然后((result)=>foos=result),
downloader.getBars().then((结果)=>bars=result),
downloader.getFooBars().then((result)=>foobars=result),
]);
processData(foos、bar、foobars);
或者,如果您更喜欢wait
而不是。那么()
,则Future.wait
调用可以是:
wait Future.wait([
(()async=>foos=wait downloader.getFoos())(),
(()async=>bar=wait downloader.getbar())(),
(()async=>foobars=wait downloader.getFooBars())(),
]);
Future<List<T>> wait <T>(
Iterable<Future<T>> futures, {
bool eagerError: false,
void cleanUp(
T successValue
)
})
snapshot.data[0] // maybe type List<Foo>
snapshot.data[1] // maybe type List<Bar>
snapshot.data[2] // maybe type String