这是我用来处理修改的逻辑:
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.
这意味着我无法访问导航器。有没有办法解决这个问题,从而在用户点击通知时打开特定页面?
FirebaseMessaging.onMessageOpenedApp.listen(_handleMessage);
MaterialApp
作为我的应用程序小部件树的根而不是我自己的小部件来解决它(根据这个答案和其他人):
void main() {
runApp(MaterialApp(
title: 'Navigation Basics',
home: MyApp(),
));
}