Flutter 如何在没有上下文的情况下在颤振应用程序中导航?

Flutter 如何在没有上下文的情况下在颤振应用程序中导航?,flutter,Flutter,我有一个应用程序,使用OneSignal接收推送通知。我已经创建了一个通知打开处理程序,它应该在单击通知时打开特定屏幕。如何在没有上下文的情况下导航到屏幕。或者如何在应用程序启动时打开特定屏幕。我的代码: OneSignal.shared.setNotificationOpenedHandler((notification) { var notify = notification.notification.payload.additionalData; if (notify["type"

我有一个应用程序,使用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"]),
      ),
    );
  }
});
当应用程序第一次打开时,我能够实现这一点,但只有当我关闭应用程序,即使我重新打开应用程序,它才会打开主页。我想那是因为环境改变了

请帮忙

看看这里:

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

final GlobalKey<NavigatorState> navigatorKey = new GlobalKey<NavigatorState>();
推送路线:

navigatorKey.currentState.pushNamed('/someRoute');

你可以使用这个很棒的插件:

包中的描述:一个一致的导航库,允许您在屏幕之间导航,打开对话框,并在代码中的任何位置显示snackbar,而无需上下文

Get.to(NextScreen()); // look at this simplicity :)
Get.back(); //  pop()
Get.off(NextScreen()); // clears the previous routes and opens a new screen.

导航工作就像一个符咒一样是未定义的工作。。!!谢谢兄弟。@temirbek在main.dart中定义navigatorKey并导入到其他文件中。此外,将MaterialApp的navigatorKey属性设置为声明的全局键(navigatorKey),而不是MaterialApp@Mustafa你能提供样品吗?我读过很多博客和论坛都给出了相同的解决方案,但导航键可以从我的dio拦截器中访问。这个软件包太棒了!谢谢那个包裹真是救命稻草!
Get.to(NextScreen()); // look at this simplicity :)
Get.back(); //  pop()
Get.off(NextScreen()); // clears the previous routes and opens a new screen.