0

再会。我知道我们使用 onSelectNotification 属性来获取当用户在使用颤振本地推送通知包时点击通知时的回调。

  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 进行状态管理。

谢谢。

4

2 回答 2

0

我用 Get.toNamed() 解决了这个问题 我的错误在于没有返回 _onSelectNotification 函数。

  Future _onSelectNotification(String payload) async {
    if (payload != null) {
      print('notification payload: $payload');
    }
    return Get.toNamed(Routes.NOTIFICATIONS);
  }

这运作良好。

但我仍然不知道如何从另一个状态类获取上下文。在上一篇文章中,我为上下文传递了 null。我知道这是错误的。怎么获得?

于 2021-09-07T07:20:37.570 回答
0

该代码不起作用,因为在您调用 Navigator 时,小部件尚未完成构建。一个简单的解决方法是Navigator.of(context)用 Future 包装,如下所示:

Future.delayed(Duration.zero).then((_){
Navigator.of(context).push(
    MaterialPageRoute(builder: (BuildContext context) {
      return NotificationsView();
    }
  ));
});
于 2021-11-28T18:35:24.147 回答