gpt4 book ai didi

asynchronous - Flutter: future 和共同偏好

转载 作者:IT王子 更新时间:2023-10-29 07:13:36 25 4
gpt4 key购买 nike

我有一个名为“retrieveDB”的函数,它使用 shared_preferences.dart 插件检索数据,我将使用这些数据来决定是否要从 Firestore 检索什么集合/文档名称。我已经在类的顶部初始化了 usersDB 和 notifDoc = ""。

    Future retrieveDB() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String db = prefs.getString('db');

if (db == "MISS") {
usersDB = "users_miss";
notifDoc = "notifTokenMISS";
} else if (db == "SDD") {
usersDB = "users";
notifDoc = "notifToken";
}
}

我首先将“retrieveDB”放在 initState() 中(在 super.initState() 之后)。

我的问题(我认为)是 shared_preferences 使用 Future 并暂停其执行并继续执行从 Firestore 检索数据的其他函数,使文档名称(usersDB 和 notifDoc = "")为空,从而产生错误。有没有办法在继续执行其他功能之前先等待“retrieveDB”,或者有什么地方可以放置“retrieveDB”,它将首先执行/完成?还是有更好的逻辑来实现我想要的?

最佳答案

异步是会传染的。您无法从异步返回到同步。如果一个函数使用了async,你需要在调用它时使用await,以确保下面的代码只在异步函数完成后执行:

Future foo() async {
await retrieveDB();
// other code that depends on the result or side effects of retrieveDB()
}

关于asynchronous - Flutter: future 和共同偏好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52146195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com