我试图在应用程序处于后台或完全关闭时存储来自 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 函数应该打印存储到共享首选项的最新值。
我通过向 onMessageOpenedApp 添加 .reload() 函数解决了这个问题,如下所示:
FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) async { await sharedPref.reload();
print(sharedPref.getString('testing'));
});