Flutter:未来和共同偏好
Flutter: Futures and shared preferences
我有一个名为 'retrieveDB' 的函数,它使用 shared_preferences.dart 插件检索数据,我将使用这些数据来决定是否要从 Firestore 检索什么 collection/document 名称。我已经在 class.
的顶部初始化了 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' 放在第一个 executed/finished 吗?还是有更好的逻辑来实现我想要的?
异步是会传染的。您无法从异步返回到同步。
如果一个函数使用 async
你需要在调用它时使用 await
以确保以下代码仅在异步函数完成后执行:
Future foo() async {
await retrieveDB();
// other code that depends on the result or side effects of retrieveDB()
}
改用匿名函数
@override
void initState() {
super.initState();
() async {
await retrieveDB();
}
}
我有一个名为 'retrieveDB' 的函数,它使用 shared_preferences.dart 插件检索数据,我将使用这些数据来决定是否要从 Firestore 检索什么 collection/document 名称。我已经在 class.
的顶部初始化了 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' 放在第一个 executed/finished 吗?还是有更好的逻辑来实现我想要的?
异步是会传染的。您无法从异步返回到同步。
如果一个函数使用 async
你需要在调用它时使用 await
以确保以下代码仅在异步函数完成后执行:
Future foo() async {
await retrieveDB();
// other code that depends on the result or side effects of retrieveDB()
}
改用匿名函数
@override
void initState() {
super.initState();
() async {
await retrieveDB();
}
}