flutter - Flutter initState 等待异步函数完成
问题描述
在我的 main.dart 中,我有这两个功能:
Future<void> _fetchMasterData() async {
print("Start fetch");
var jwt = await API.attemptLogIn();
if (jwt != null) {
Map<String, dynamic> answer = jsonDecode(jwt);
if (answer['message'] == 'Auth ok') {
jwtToken = 'Bearer ' + answer['token'];
}
}
await _getArticles();
await _getMainCategories();
await _getIngredients();
await _getArticleIngredients();
print("EndMasterData fetch");
}
和
@override
void initState() {
super.initState();
_fetchMasterData();
}
我想要的是在 initState 中等待,直到 _fethcMasterData 完成,然后再调用 Widgert 构建。
那可能吗?非常感谢您的帮助!
解决方案
这里我如何在 initstate 中使用异步函数;
builder() async {
favoriteDatabase =
await $FloorFavoriteDatabase.databaseBuilder('favorite_database.db')
.build();
setState(() {
favoriteDao = favoriteDatabase.favoriteDao;
});
}
@override
void initState() {
// TODO: implement initState
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
WidgetsBinding.instance.addPostFrameCallback((_) =>
getNamePreferences().then(updateName));
});
builder();
favoriteDao.findAllMoviesAsStreamW();
favoriteDao.findAllMoviesAsStream();
}
您也可以查看这篇迷你文章。
推荐阅读
- azure - Kusto 将 ID 转换为名称
- excel - 是否有使用 vba 复制另一个工作簿的防弹方法?
- javascript - 在缩放期间在时间刻度上设置刻度
- javascript - VueJS, an endless loop of object creation and Error: "Maximum call stack size exceeded"
- c# - ML.NET 向现有模型添加新数据
- sql - 带有存储过程的 UNION
- tensorflow - 如果缺少 ckpt.index 文件,则恢复检查点
- rust - 无法将实现特征的结构装箱为特征对象
- r - 根据 R 中的多个条件改变新列
- swiftui - 从 SwiftUI 中的父视图推送多个导航链接