The*_*nax 3 asynchronous async-await dart flutter
我最近开始使用 flutter 进行开发。当启动我的应用程序时,我首先要加载来自不同来源的数据。我在这方面遇到了麻烦,似乎我还没有理解异步/等待。
我想做的事
启动我的应用程序时,我想从多个源加载数据。这应该并行完成,但只有在所有数据源完全加载后才应继续。
我尝试过的
import 'package:flutter/material.dart';
class AsyncTester extends StatefulWidget {
@override
_AsyncTesterState createState() => _AsyncTesterState();
}
class _AsyncTesterState extends State<AsyncTester> {
@override
void initState() {
super.initState();
startApplication();
}
@override
Widget build(BuildContext context) {
return Container();
}
void startApplication() async {
await loadData();
print("starting Application!");
}
loadData() {
loadDataSource1();
loadDataSource2();
}
void loadDataSource1() async {
await Future.delayed(Duration(seconds: 3));
print("Data Source 1 loaded.");
}
void loadDataSource2() async {
await Future.delayed(Duration(seconds: 2));
print("Data Source 2 loaded.");
}
}
Run Code Online (Sandbox Code Playgroud)
输出是:
I/flutter (23100):启动应用程序!
I/flutter (23100):已加载数据源 2。
I/flutter (23100):已加载数据源 1。
我不明白为什么 startApplication() 不等待 loadData() 完成。我想这正是await 所做的?
顺便说一句,我将 loadDataSource1() 和 loadDataSource2() 嵌套在 loadData() 中,因为这样做
void startApplication() async {
await loadDataSource1();
await loadDataSource2();
print("starting Application!");
}
Run Code Online (Sandbox Code Playgroud)
会一个接一个地加载数据。这是正确的还是有更好的方法来做到这一点?
Gui*_*oux 10
您应该使用Future.wait,此方法将并行执行两个异步操作,并在它们全部完成后完成:
void startApplication() async {
await Future.wait([
loadDataSource1(),
loadDataSource2(),
]);
print("starting Application!");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2225 次 |
| 最近记录: |