Flutter Dart Future。等待多个Future并返回不同类型的结果

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

我正在使用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);
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