我想在收到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()));
}
}
根据Firebase后台消息的文档:
由于处理程序在应用程序上下文之外的独立环境中运行,因此无法更新应用程序状态或执行任何影响UI的逻辑。然而,您可以执行HTTP请求、IO操作(更新本地存储(、与其他插件通信等逻辑。
因此,如果您的应用程序在后台,则无法按照您想要的方式启动导航。如果向用户显示通知,用户可以决定单击该通知,然后可以使用FirebaseMessaging.onMessageOpenedApp
。在这个处理程序中,您将能够处理导航。