代码之家  ›  专栏  ›  技术社区  ›  skjagini

颤振:如何避免在现有路线上推同一条路线

  •  1
  • skjagini  · 技术社区  · 5 年前

    我有底部导航栏的视图,当你按下一个导航栏项目时,一条新的路线会被推到视图中。

     final navigatorKey = GlobalKey<NavigatorState>();
    
     @override
      Widget build(BuildContext context) => MaterialApp(
        home: Scaffold(
          key: _scaffoldKey,
          body: _buildBody(context),
          bottomNavigationBar: _buildBottomNavigationBar(context),
        ),
      );
    
     void routeToView(routeIndex) {
          navigatorKey.currentState.pushNamed(pagesRouteFactories.keys.toList()[routeIndex]);
      }
    

    我想防止在当前视图中推送相同的路线。我想将当前路由与我们尝试推送的新路由进行比较,如果相同,则忽略推送路由。

    如果和我们要推的路线相同,我想把视图滚动到顶部。

    任何想法。

    1 回复  |  直到 5 年前
        1
  •  1
  •   Harsh Bhikadia    5 年前

    navigatorState不公开获取 当前路由,并且路由不公开用于确定 路线的路径。路由可以是匿名的。你可以 找出给定的路由是否位于导航器堆栈右侧的顶部 现在使用的是iscurrent方法,但这不太方便 您的用例。

    https://stackoverflow.com/a/46498543/2554745

    这是我能想到的最接近的解决方案:

    Navigator.of(context).pushNamedAndRemoveUntil(
      "newRouteName",
      (route) => route.isCurrent
        ? route.settings.name == "newRouteName"
          ? false
          : true
        : true);
    

    如果路由的名称为“newRouteName”,则会弹出当前路由,然后按新路由,否则不会弹出任何内容。