- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在收到 FCM 后台消息时切换到屏幕。但是对于这个 context
是必需的,我在 FirebaseBackgroundMessageHandler
中肯定没有,所以在互联网上搜索后我发现我可以从 获取当前上下文NavigatorKey
所以我创建了这个全局变量:
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
这是我的 Material 应用程序:
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()));
}
}
最佳答案
根据documentation Firebase 背景消息:
Since the handler runs in its own isolate outside your applications context, it is not possible to update application state or execute any UI impacting logic. You can however perform logic such as HTTP requests, IO operations (updating local storage), communicate with other plugins etc.
因此,如果您的应用程序在后台运行,您将无法以您希望的方式启动导航。如果您向用户显示通知,用户可以决定点击它,然后您可以使用 FirebaseMessaging.onMessageOpenedApp
。在此处理程序中,您将能够处理导航。
关于android - navigatorKey.currentContext 始终为 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70662344/
我想在收到 FCM 后台消息时切换到屏幕。但是对于这个 context 是必需的,我在 FirebaseBackgroundMessageHandler 中肯定没有,所以在互联网上搜索后我发现我可以从
以前使用 MaterialApp 有一种方法可以使用位于 MaterialApp 小部件 上的 NavigatorKey 设置 GlobalContext . 但是现在看起来替代方案不再可能了,我有这
我是一名优秀的程序员,十分优秀!