当 FCM 后台消息接收时,我想切换到一个屏幕。但是为了做到这一点,需要 context
,而在 FirebaseBackgroundMessageHandler
中我肯定没有这个参数。于是我在网上搜索后发现可以从 NavigatorKey
获取当前的上下文,因此我创建了这个全局变量:
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
我的材料应用程序中有这个:
runApp(GetMaterialApp(
navigatorKey: navigatorKey,
home: const MyHomePage(),));
现在,每当我收到后台消息时,我尝试切换到所需的屏幕,但我总是得到空上下文,因此不能Push
。通过GetX
导航也会抛出错误。
我错过了什么?请帮忙!!!
Firebase 后台处理程序:
Future<dynamic> firebaseMessagingBackgroundHandler(RemoteMessage message) async {
await Firebase.initializeApp();
if(message.data['test'] == '123'){
Navigator.of(navigatorKey.currentContext!).push(MaterialPageRoute(builder: (context) =>const Wallet()));
}
}
FirebaseMessaging.onMessageOpenedApp
从未被调用。这是我的代码:FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) { print(message.toString()); Get.to(()=> const Wallet()); });
我不知道我做错了什么。 - Siddharth MehraonMessageOpenedApp
没有执行? - Peter Koltaiinitialize
方法,你在设置时必须调用它。使用这个方法,你可以设置一个onSelectNotification
函数,当用户点击使用此包显示的通知时,该函数将被执行。 - Peter KoltaifirebaseMessagingBackgroundHandler
中,正如上面所说,使用navigation.currentContext
失败了,因为它在另一个隔离区中。点击接受按钮后可以做什么呢? - thewebjackal