在Flutter中打开推送通知时使用导航器



I?我使用Firebase Cloud Messaging通过云功能向我的flutter应用程序发送推送通知,并在通知中添加数据,这些数据将定义用户点击通知时打开的页面。

这是我用来处理修改的逻辑:

void _handleMessage(RemoteMessage message) {
Navigator.pushNamed(context, "/shop", arguments: message.data["id"]);
return;
}
Future<void> setupInteractedMessage() async {
// Get any messages which caused the application to open from
// a terminated state.
RemoteMessage? initialMessage = await FirebaseMessaging.instance.getInitialMessage();
// If the message also contains a data property with a "type" of "chat",
// navigate to a chat screen
if (initialMessage != null) {
_handleMessage(initialMessage);
}
// Also handle any interaction when the app is in the background via a
// Stream listener
FirebaseMessaging.onMessageOpenedApp.listen(_handleMessage);
}    

在初始化firebase应用程序时,我调用setupInteractedMessage();

这是有效的,但当应用程序在后台并且我点击通知时,我会得到以下错误:

[ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: Navigator operation requested with a context that does not include a Navigator.
The context used to push or pop routes from the Navigator must be that of a widget that is a descendant of a Navigator widget.

这意味着我无法访问导航器。有没有一种方法可以解决这个问题,从而在用户点击通知时打开特定的页面?

在启动屏幕或任何其他启动屏幕Build处移动此行。

FirebaseMessaging。onMessageOpenedApp.restant(_handleMessage);

我在相同的场景中遇到了同样的问题(从推送通知启动视图),并通过将MaterialApp作为我的应用程序小部件树的根而不是我自己的小部件来解决它(根据这个答案和其他答案):

void main() {
runApp(MaterialApp(
title: 'Navigation Basics',
home: MyApp(),
));
}

最新更新