Flutter 如何在Firebase消息配置功能中处理颤振路径导航
Flatter的firebase_消息包的文档建议我们在应用程序的生命周期中尽早调用configure函数。我理解为什么建议这样做。 目前我的应用程序有这种结构,当用户第一次打开应用程序时,他们会进入“第一页”,如果他们已经登录,这将决定是将他们带到“登录页”还是“MainPageOfApp”。要移动到任一页面,我使用PushReplacement,这样“FirstPage”的上下文就消失了 从技术上讲,我应该在“FirstPage”中调用firebase_messaging的configure,因为这是最早的机会,但这不会起作用,因为当我导航到后续两个页面(LoginPage或MainPage)中的任何一个时,我将丢失第一个页面的上下文。这是一个问题,因为我将firebase_消息配置为在收到通知时导航到某个页面,但配置firebase_消息时的上下文不存在 我的另一个解决方案是在主页中配置firebase_消息,但问题是,当我在应用程序终止时(在_启动配置时)收到通知时,应用程序首先打开主页,然后导航到通知通知通知它打开的页面(执行它在_启动时配置的操作)。我想是的 我的问题是,鉴于我将使用Navigator.pushReplacement转到下一页(“登录页面”或“主页”),因此我将丢失其上下文,如何在FirstPage中配置firebase_消息传递 谢谢 我找到了解决办法。 使用:Flutter 如何在Firebase消息配置功能中处理颤振路径导航,flutter,Flutter,Flatter的firebase_消息包的文档建议我们在应用程序的生命周期中尽早调用configure函数。我理解为什么建议这样做。 目前我的应用程序有这种结构,当用户第一次打开应用程序时,他们会进入“第一页”,如果他们已经登录,这将决定是将他们带到“登录页”还是“MainPageOfApp”。要移动到任一页面,我使用PushReplacement,这样“FirstPage”的上下文就消失了 从技术上讲,我应该在“FirstPage”中调用firebase_messaging的configure
GlobalKey
据此:
并将密钥传递给FirebaseMessaging.configure()方法
然后,当消息发出时,上下文不在那里,但您有导航器的参考键,可以使用它。\u firebasemessage.configure(
_firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) async {
},
onBackgroundMessage: myBackgroundMessageHandler,
onLaunch: (Map<String, dynamic> message) async {
print("onLaunch: $message");
_navigateToItemDetail(message);
},
onResume: (Map<String, dynamic> message) async {
print("onResume: $message");
_navigateToItemDetail(message);
},
);
onMessage:(映射消息)异步{
},
onBackgroundMessage:myBackgroundMessageHandler,
onLaunch:(映射消息)异步{
打印(“onLaunch:$message”);
_导航项目详细信息(消息);
},
onResume:(映射消息)异步{
打印(“onResume:$message”);
_导航项目详细信息(消息);
},
);
您的导航功能如下所示:
void _navigateToItemDetail(Map<String, dynamic> message) {
final Item item = _itemForMessage(message);
// Clear away dialogs
Navigator.popUntil(context, (Route<dynamic> route) => route is PageRoute);
if (!item.route.isCurrent) {
Navigator.push(context, item.route);
}
}
void\u navigateToItemDetail(地图消息){
最终项目=_itemForMessage(消息);
//清除对话框
Navigator.popintil(context,(Route-Route)=>Route是PageRoute);
如果(!item.route.isCurrent){
推送(上下文、项、路线);
}
}
我也有这个问题。
有一个名为get的包:
在main中,您可以将MaterialApp更改为GetMaterialApp并导入:
导入“package:get/get_navigation/get_navigation.dart”
之后,转到以下位置:_firebaseMessaging.configure();
然后创建一个函数:
goToNext(){
Get.to("The page you want to go to");
}
然后在_firebaseMessaging.configure()中;叫它
onLaunch:(映射消息)异步{
打印(“onLaunch:$message”);
goToNext();
},
onResume:(映射消息)异步{
打印(“onResume:$message”);
goToNext();
},
onLaunch: (Map<String, dynamic> message) async {
print("onLaunch: $message");
goToNext();
},
onResume: (Map<String, dynamic> message) async {
print("onResume: $message");
goToNext();
},