Flutter - 如何在应用程序关闭时导航通知
Flutter - How to navigate on notification when app is closed
应用关闭时打开通知时如何在 flutter 中导航?
这是我从主函数调用的代码:
final FirebaseMessaging _fcm = FirebaseMessaging.instance;
_fcm.getInitialMessage().then((RemoteMessage message) {
if (message != null && message.data != null) {
Keys.navKey.currentState.pushNamed(Routes.messageDetail);
}
});
在我的 main.dart 中,我设置了 MaterialApp 的 navigatorKey:
MaterialApp(
navigatorKey: Keys.navKey,)
而navKey是一个静态变量:
class Keys {
static final navKey = new GlobalKey<NavigatorState>();
}
如果我在应用程序关闭时打开通知,我会收到此错误:
NoSuchMethodError: The method 'pushNamed' was called on null.
Receiver: null Tried calling: pushNamed("MESSAGEDETAIL")
我可以使用导航键在应用中的其他地方导航。
是否有其他方法可以做到这一点,或者我怎样才能确保 navigationKey 已初始化?
使用FirebaseMessaging.instance.getInitialMessage()
在后台处理消息
示例:
void handleMessageOnBackground() {
FirebaseMessaging.instance.getInitialMessage().then(
(remoteMessage) {
if (remoteMessage != null) {
String payload = json.encode(remoteMessage.data);
//navigator two orther screen
}
},
);
}
并在 home_screen.dart
中初始化 handleMessageOnBackground()
,而不是 main.dart
main.dart
> splash_screen
> home_screen
应用关闭时打开通知时如何在 flutter 中导航?
这是我从主函数调用的代码:
final FirebaseMessaging _fcm = FirebaseMessaging.instance;
_fcm.getInitialMessage().then((RemoteMessage message) {
if (message != null && message.data != null) {
Keys.navKey.currentState.pushNamed(Routes.messageDetail);
}
});
在我的 main.dart 中,我设置了 MaterialApp 的 navigatorKey:
MaterialApp(
navigatorKey: Keys.navKey,)
而navKey是一个静态变量:
class Keys {
static final navKey = new GlobalKey<NavigatorState>();
}
如果我在应用程序关闭时打开通知,我会收到此错误:
NoSuchMethodError: The method 'pushNamed' was called on null. Receiver: null Tried calling: pushNamed("MESSAGEDETAIL")
我可以使用导航键在应用中的其他地方导航。
是否有其他方法可以做到这一点,或者我怎样才能确保 navigationKey 已初始化?
使用FirebaseMessaging.instance.getInitialMessage()
在后台处理消息
示例:
void handleMessageOnBackground() {
FirebaseMessaging.instance.getInitialMessage().then(
(remoteMessage) {
if (remoteMessage != null) {
String payload = json.encode(remoteMessage.data);
//navigator two orther screen
}
},
);
}
并在 home_screen.dart
中初始化 handleMessageOnBackground()
,而不是 main.dart
main.dart
> splash_screen
> home_screen