小编are*_*ech的帖子

Flutter:共享首选项的奇怪行为

我有不一致的共享首选项值的问题。我将尝试尽可能简单地描述它。

我正在使用 Firebase Cloud Messaging 进行推送通知。当应用程序在后台并且通知进来时,调用后台处理程序波纹管。

Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
  final SharedPreferences prefs = await SharedPreferences.getInstance();
  final int counter = (prefs.getInt('badge') ?? 0) + 1;

  prefs.setInt('badge', counter).then((bool success) {
    print(counter);
  });
}
Run Code Online (Sandbox Code Playgroud)

我的小部件使用 WidgetsBindingObserver 来确定生命周期状态。当我进入应用程序时,该小部件的状态是 onResume 并且我想从这样的共享首选项中读取该徽章值。

void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.resumed) {
      final SharedPreferences prefs = await SharedPreferences.getInstance();
      final int counter = (prefs.getInt('badge') ?? 0); 
      print(counter);
    }
  }

Run Code Online (Sandbox Code Playgroud)

场景一:

  • 应用程序打开,通知进来 - 将徽章字段设置为 1。
  • 应用程序在后台,通知进来了 - 后台处理程序将徽章字段设置为 2。
  • 应用程序恢复,阅读那个徽章字段,它仍然是 1。

场景2:

  • 应用程序打开,通知进来 - 将徽章字段设置为 1。
  • 应用程序在后台,通知进来了 …

sharedpreferences flutter firebase-cloud-messaging

5
推荐指数
2
解决办法
380
查看次数