jit*_*555 14 future dart flutter
我们如何合并多个 FutureTask,以便我们可以在同一响应中获得所有的回调。
我们使用Future<T>
像
Future<String> getData(int duration) async {
await Future.delayed(Duration(seconds: duration)); //Mock delay
return "This a test data for duration $duration";
}
Run Code Online (Sandbox Code Playgroud)
调用上面的方法就像getData(2).then((value) => print(value));
如果我们想调用多个Future Task,那么该怎么做呢?
小智 17
要同时执行所有 future,请使用Future.wait
This 采用 future 列表并返回列表的 future: 假设您有这些 future。
class CovidAPI {
Future<int> getCases() => Future.value(1000);
Future<int> getRecovered() => Future.value(100);
Future<int> getDeaths() => Future.value(10);
}
Run Code Online (Sandbox Code Playgroud)
您可以使用 Future.wait([list of futures]) 将所有 future 放在一起
final api = CovidAPI();
final values = await Future.wait([
api.getCases(),
api.getRecovered(),
api.getDeaths(),
]);
print(values); // [1000, 100, 10]
Run Code Online (Sandbox Code Playgroud)
当 future 是独立的并且不需要按顺序执行时,这是理想的选择。来源:https ://codewithandrea.com/videos/top-dart-tips-and-tricks-for-flutter-devs/
对于它来说,FutureGroup 可以用来组合多个流
FutureGroup 为我们提供了将多个 future 合并为一个组的功能,当所有 future 任务完成时,它将在最后给出回调。
依赖关系:
dependencies:
async: ^2.4.1
Run Code Online (Sandbox Code Playgroud)
如何实施FutureGroup?
FutureGroup futureGroup = FutureGroup();
futureGroup.add(future1);
futureGroup.add(future2);
futureGroup.add(future3);
Run Code Online (Sandbox Code Playgroud)
使用:
void main() {
Future<String> future1 = getData(2);
Future<String> future2 = getData(4);
Future<String> future3 = getData(6);
FutureGroup futureGroup = FutureGroup();
futureGroup.add(future1);
futureGroup.add(future2);
futureGroup.add(future3);
futureGroup.close();
futureGroup.future.then((value) => {print(value)});
}
Future<String> getData(int duration) async {
await Future.delayed(Duration(seconds: duration)); //Mock delay
return "This a test data";
}
Run Code Online (Sandbox Code Playgroud)
输出:
I/flutter ( 5866): [这是一个测试数据,这是一个测试数据,这是一个测试数据] // 6 秒后调用。
注意:只有当所有 Future Task 完成时才会调用一次,这里它将在 6 秒后运行。
归档时间: |
|
查看次数: |
9496 次 |
最近记录: |