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();
    }
    }