【发布时间】:2021-03-05 17:59:30
【问题描述】:
我遇到了共享首选项值不一致的问题。我会尽量简单地描述它。
我正在使用 Firebase 云消息传递推送通知。当应用程序处于后台并收到通知时,将调用下面的后台处理程序。
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);
});
}
我的小部件使用 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);
}
}
场景 1:
- 应用打开,收到通知 - 将徽章字段设置为 1。
- 应用在后台,收到通知 - 后台处理程序将徽章字段设置为 2。
- 应用程序已恢复,读取徽章字段,它仍然是 1。
场景 2:
- 应用打开,收到通知 - 将徽章字段设置为 1。
- 应用在后台,收到通知 - 后台处理程序将徽章字段设置为 2。
- 应用在后台,收到通知 - 后台处理程序将徽章字段设置为 3。
- 应用程序已恢复,读取徽章字段,它仍然是 1。
问题:知道为什么字段没有更新吗?
【问题讨论】:
-
你找到这个问题的答案了吗?
标签: flutter firebase-cloud-messaging sharedpreferences