【问题标题】:How to get name of the current route?如何获取当前路线的名称?
【发布时间】:2020-04-02 15:59:06
【问题描述】:

我需要获取我当前的路线名称。我使用GlobalKey 在每个页面中创建navigatorSevice 而不是Navigator.of(context)。所以我创建navKey:

class Keys {
    static final GlobalKey<NavigatorState> navKey = GlobalKey<NavigatorState>();
}

当我想重定向到另一个页面时,我会写Keys.navKey.currentState.pushNamed()pushReplacementNamed或其他一些方法。

我想知道我在 Interceptor 中的当前路线,但我没有上下文。

【问题讨论】:

  • 你可以试试ModalRoute.of(context).settings.name
  • @IbrahimKarahan 我不想使用上下文,因为我无法访问 Interceptor 中的上下文,我使用全局键在页面之间导航。
  • @AndrewKovalchuk 你找到这个问题的答案了吗?
  • @Shravya 不,很遗憾,我没有找到。

标签: flutter flutter-navigation


【解决方案1】:

您已经可以从 GlobalKey&lt;NavigatorState&gt;() 访问 BuildContext。

这里 - navKey.currentContext,像这样插入 - ModalRoute.of(navKey.currentContext).settings.name

但这会失败,我建议将 navKey 属性设为吸气剂。你可以这样做..

final App = Helper.I;

class Helper {
    static Helpers get I => Helpers._();

    Helpers._();

    GlobalKey<NavigatorState> get navKey => GlobalKey<NavigatorState>();
    
    BuildContext get context => navKey.currentContext;

    double get height => MediaQuery.of(context).size.height;

    double get width => MediaQuery.of(context).size.width;
}

这样,您始终可以在应用中的任何位置(甚至在您的业务逻辑中)访问 BuildContext。

用法 - App.contextApp.width(用于设备宽度)

【讨论】:

  • 在获取当前路径路由名称ModalRoute.of(navKey.currentContext).settings.name 的类而不是Widget 时总是返回null,例如Interceptor。
  • 您是否将“navKey”添加到 MaterialApp 小部件?像这样 --- MaterialApp( debugShowCheckedModeBanner: false, navigatorKey: App.navKey, )。添加此参数绑定路由。所以执行ModalRoute.of(navKey.currentContext).settings.name 应该可以工作
  • 是的,我在MaterialApp 中添加了navKey,但是ModalRoute 获取路由名称,只能在具有路由上下文的页面上使用,否则不起作用。
  • 好吧,可能是弃用。这是我上次检查的工作
  • 查看这个包 - pub.dev/packages/navigation_history_observer。使用很简单,只需将其作为观察者添加到 MaterialApp 即可。
猜你喜欢
  • 2015-09-14
  • 2015-07-14
  • 1970-01-01
  • 2020-04-19
  • 1970-01-01
  • 2013-08-20
  • 2015-03-29
  • 2016-05-08
  • 2016-04-08
相关资源
最近更新 更多