我在共享偏好设置方面遇到了不一致的问题。我会尽可能简单地描述它。
我正在使用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);
});
}
我的小部件使用WidgetsBindingObserver来确定生命周期状态。当我进入应用程序时,该小部件的状态为onResume,我想从共享首选项中读取徽章值,如下所示。
我的小部件使用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。
问题:有什么想法为什么字段没有更新吗?