为什么我在从 firebase 后台消息存储数据时没有从共享首选项中获取最新数据?

问题描述 投票:0回答:1

我试图在应用程序处于后台或完全关闭时存储来自 firebase 通知的最新数据,如下所示:

@pragma('vm:entry-point')
  static Future<void> _firebaseMessagingBackgroundHandler(
      RemoteMessage message) async {
    WidgetsFlutterBinding.ensureInitialized();
    await Firebase.initializeApp(
      name: 'taxigo',
      options: DefaultFirebaseOptions.currentPlatform,
    );
    SharedPreferences _sharedPref = await SharedPreferences.getInstance();
    _sharedPref.setString('testing', 'test1');
    print(_sharedPref.getString('testing'));
  }

它按预期打印 test1。但在 main 函数中,我尝试使用 onMessageOpenedApp firebase 函数打印相同的内容,如下所示:

void main() async {
  await Firebase.initializeApp(
    name: 'taxigo',
    options: DefaultFirebaseOptions.currentPlatform,
  ).then((value) {
  });

  FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) async {
    SharedPreferences _sharedPref = await SharedPreferences.getInstance();
    print(_sharedPref.getString('testing'));
  });
}

但它打印 null,但如果我重新启动应用程序,它将打印 test1。 我注意到如果我将测试值更新为 test2 并重新启动应用程序,onMessageOpenedApp 将打印旧值(test1)。

我希望 onMessageOpenedApp 函数应该打印存储到共享首选项的最新值。

flutter firebase sharedpreferences flutter-background
1个回答
0
投票

我通过向 onMessageOpenedApp 添加 .reload() 函数解决了这个问题,如下所示:

FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) async { await sharedPref.reload(); 
print(sharedPref.getString('testing')); 
});
© www.soinside.com 2019 - 2024. All rights reserved.