navigatorKey.currentContext is Always Null



我想在收到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。在这个处理程序中,您将能够处理导航。

最新更新