最近我开始学习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.");
}
}
输出结果如下:
我不明白为什么startApplication()没有等待loadData()完成。 我认为这正是await的作用?顺便说一句,我将loadDataSource1()和loadDataSource2()嵌套在loadData()中,因为这样做...I/flutter (23100): 开始应用!
I/flutter (23100): 数据源2已加载。
I/flutter (23100): 数据源1已加载。
void startApplication() async {
await loadDataSource1();
await loadDataSource2();
print("starting Application!");
}
是否有更好的方法来按顺序加载数据?
loadData()
函数中,您需要await
其他调用,以便暂停程序执行,直到返回带值的 Future。 - Jorge Luis