首页 > 解决方案 > Flutter - OneSignal - setNotificationOpenedHandler - OpenPage

问题描述

我有一个颤振应用程序。我正在使用 OneSignal 推送通知。单击通知时,我想打开一个页面。但是,第一次点击的时候,因为找不到上下文,所以没有页面跳转。点击通知时如何打开相关页面?

OneSignal.shared.setNotificationOpenedHandler((OSNotificationOpenedResult result) {
        try {
         Navigator.push(
            context,
            MaterialPageRoute(
              settings: RouteSettings(name: '/a'),
              builder: (context) => Settings(),
            ),
          );
        }
        catch(e) {
          print('e : ' + e.toString());
        }
        
      });

谢谢你。

标签: flutterpush-notificationflutter-layoutflutter-dependenciesonesignal

解决方案


您可以为 MaterialApp 使用 GlobalKey 并在没有上下文的情况下使用路由器。如果在我的 http 控制器上发现未经授权的状态代码,我会使用它将用户重定向到登录页面。

首先,我使用密钥创建了一个类:

class NavigatorKey {static final key = new GlobalKey<NavigatorState>();}

然后在我的 MaterialApp 中:

...
return MaterialApp(
    navigatorKey: key
...

然后我导入类并使用这样的密钥:

NavigatorKey.key.currentState.pushNamedAndRemoveUntil('/login', (r) => false);

推荐阅读