一尘不染

在Flutter应用中如何在没有上下文的情况下进行导航?

flutter

我有一个应用程序可以使用OneSignal接收推送通知。我做了一个通知打开处理程序,应在单击通知时打开特定的屏幕。我如何导航到没有上下文的屏幕。或如何在应用启动时打开特定屏幕。我的代码:

OneSignal.shared.setNotificationOpenedHandler((notification) {
  var notify = notification.notification.payload.additionalData;
  if (notify["type"] == "message") {
    Navigator.of(context).push(
      MaterialPageRoute(
        builder: (context) => DM(user: notify['id']),
      ),
    );
  }
  if (notify["type"] == "user") {
    Navigator.of(context).push(
      MaterialPageRoute(
        builder: (context) => Profileo(notify["id"]),
      ),
    );
  }
  if (notify["type"] == "post") {
    Navigator.of(context).push(
      MaterialPageRoute(
        builder: (context) => ViewPost(notify["id"]),
      ),
    );
  }
});

首次打开该应用程序时,我可以实现此目的,但是,即使我关闭了该应用程序,即使重新打开它,它也只能打开主页。我想那是因为上下文已更改。

请帮忙!!


阅读 305

收藏
2020-08-13

共1个答案

一尘不染

在这里看这个:https
:
//github.com/brianegan/flutter_redux/issues/5#issuecomment-361215074

您可以为导航设置全局键:

final GlobalKey<NavigatorState> navigatorKey = new GlobalKey<NavigatorState>();

将其传递给MaterialApp:

new MaterialApp(
      title: 'MyApp',
      onGenerateRoute: generateRoute,
      navigatorKey: navigatorKey,
    );

推送路线:

navigatorKey.currentState.pushNamed('/someRoute');
2020-08-13