Flutter SharedPreferences保存在Firebase FCM背景中,按按钮加载不起作用

pkmbmrz7  于 2023-01-14  发布在  Flutter
关注(0)|答案(1)|浏览(117)

我想保存值到SharedPreferences当FCM在后台接收消息(在Android模拟器上测试):

Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
  await Firebase.initializeApp();

  prefs = await SharedPreferences.getInstance();

  if (await prefs.setString("test", "test")) {
    debugPrint("Success");
  } else {
    debugPrint("Error");
  }
  debugPrint("Keys: ${prefs.getKeys().toString()}");
}

FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
Future<void> _printKeys() async {
  prefs = await SharedPreferences.getInstance();
  setState(() {
    debugPrint("BUTTON Keys: ${prefs.getKeys().toString()}");
  });
}
ElevatedButton(
  onPressed: () async => await _printKeys(),
  child: const Text("get SP keys"))

当应用程序在后台时,收到消息,然后我把应用程序放到前台,按下"获取SP键"按钮。密钥不存在。日志:
一个三个三个一个
重启应用程序时,"测试"键在SharedPreferences中可用。
出了什么问题,App如何从SharedPreferences中获得一致的值?

2wnc66cl

2wnc66cl1#

OK终于找到了解决方案。在描述的情况下,SharedPreferences似乎不同步。我所做的是在两者之间添加X1 M0 N1 X,它工作了:-)

SharedPreferences.getInstance().then((prefs) => {
  prefs.reload().then((_) {
    // Do the staff
  })
});

奇怪,因为应用程序应该只有一个SP示例。

相关问题