我想在收到 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()));
}
}
根据文档 https://firebase.flutter.dev/docs/messaging/usage/#background-messagesFirebase 后台消息:
由于处理程序在应用程序上下文之外以自己的隔离方式运行,因此无法更新应用程序状态或执行任何影响 UI 的逻辑。但是,您可以执行 HTTP 请求、IO 操作(更新本地存储)、与其他插件通信等逻辑。
因此,如果您的应用程序位于后台,您将无法按照您想要的方式启动导航。如果您向用户提供通知,用户可以决定单击它,然后您可以使用FirebaseMessaging.onMessageOpenedApp
。在此处理程序中,您将能够处理导航。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)