为什么在 flutter 中点击通知时路由不起作用? (项目基于GetX和flutter本地推送通知包)
why routing is not working when tap on the notification in flutter? ( the project is based on GetX and flutter local push notification package )
美好的一天。
我知道我们使用 onSelectNotification 属性 在用户点击通知时使用 flutter 本地推送通知包来获取回调。
Future<void> _initialize() async {
await _configureLocalTimeZone();
AndroidInitializationSettings initializationSettingsAndroid =
AndroidInitializationSettings('@mipmap/ic_launcher');
IOSInitializationSettings initializationSettingsIOS =
IOSInitializationSettings(
onDidReceiveLocalNotification: _onDidReceiveLocalNotification);
InitializationSettings initializationSettings = InitializationSettings(
android: initializationSettingsAndroid, iOS: initializationSettingsIOS);
await _flutterLocalNotificationsPlugin.initialize(initializationSettings,
onSelectNotification: _onSelectNotification); // This is for the callback
}
这是 _onSelectsNotification 函数。
Future _onSelectNotification(String payload) async {
if (payload != null) {
print('notification payload: $payload');
}
BuildContext context;
await Navigator.of(context)
.push(MaterialPageRoute(builder: (BuildContext context) {
return NotificationsView();
})); // ***** This is not working. with no error.
}
我不确定上下文使用什么。我认为由于上下文值,通往 NotificationView() 的下一条路线不起作用。
你能帮我解决这个问题吗?
我现在正在使用 GetX 进行状态管理。
谢谢。
我用 Get.toNamed() 解决了这个问题
我的错误是没有在 _onSelectNotification 函数中返回。
Future _onSelectNotification(String payload) async {
if (payload != null) {
print('notification payload: $payload');
}
return Get.toNamed(Routes.NOTIFICATIONS);
}
效果很好。
但我仍然不知道如何从另一个状态获取上下文class。
在前面的post中,我为上下文传递了null。
我知道这是错误的。如何获得?
代码无法运行,因为在您调用 Navigator 时,小部件尚未完成构建。一个简单的解决方法是用 Future 包裹 Navigator.of(context)
,像这样:
Future.delayed(Duration.zero).then((_){
Navigator.of(context).push(
MaterialPageRoute(builder: (BuildContext context) {
return NotificationsView();
}
));
});
美好的一天。 我知道我们使用 onSelectNotification 属性 在用户点击通知时使用 flutter 本地推送通知包来获取回调。
Future<void> _initialize() async {
await _configureLocalTimeZone();
AndroidInitializationSettings initializationSettingsAndroid =
AndroidInitializationSettings('@mipmap/ic_launcher');
IOSInitializationSettings initializationSettingsIOS =
IOSInitializationSettings(
onDidReceiveLocalNotification: _onDidReceiveLocalNotification);
InitializationSettings initializationSettings = InitializationSettings(
android: initializationSettingsAndroid, iOS: initializationSettingsIOS);
await _flutterLocalNotificationsPlugin.initialize(initializationSettings,
onSelectNotification: _onSelectNotification); // This is for the callback
}
这是 _onSelectsNotification 函数。
Future _onSelectNotification(String payload) async {
if (payload != null) {
print('notification payload: $payload');
}
BuildContext context;
await Navigator.of(context)
.push(MaterialPageRoute(builder: (BuildContext context) {
return NotificationsView();
})); // ***** This is not working. with no error.
}
我不确定上下文使用什么。我认为由于上下文值,通往 NotificationView() 的下一条路线不起作用。 你能帮我解决这个问题吗? 我现在正在使用 GetX 进行状态管理。
谢谢。
我用 Get.toNamed() 解决了这个问题 我的错误是没有在 _onSelectNotification 函数中返回。
Future _onSelectNotification(String payload) async {
if (payload != null) {
print('notification payload: $payload');
}
return Get.toNamed(Routes.NOTIFICATIONS);
}
效果很好。
但我仍然不知道如何从另一个状态获取上下文class。 在前面的post中,我为上下文传递了null。 我知道这是错误的。如何获得?
代码无法运行,因为在您调用 Navigator 时,小部件尚未完成构建。一个简单的解决方法是用 Future 包裹 Navigator.of(context)
,像这样:
Future.delayed(Duration.zero).then((_){
Navigator.of(context).push(
MaterialPageRoute(builder: (BuildContext context) {
return NotificationsView();
}
));
});