我有底部导航栏的视图,当您按下导航栏项目时,新路线会被推送到视图中。
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]); }
我想防止在当前视图上推送相同的路由。我想将当前路线与我们尝试推入的新路线进行比较,如果相同则忽略推入路线。
如果要尝试的路线与我相同,我想将视图滚动到顶部
有任何想法吗。
NavigatorState也不公开用于获取当前路线路径的API,Route也不公开用于确定路线路径的API。路由可以是(通常是匿名的)。您可以使用isCurrent方法立即确定给定的Route是否位于导航器堆栈的顶部,但这对于您的用例而言并不十分方便。
这是我能想到的最接近的解决方案:
Navigator.of(context).pushNamedAndRemoveUntil( "newRouteName", (route) => route.isCurrent && route.settings.name == "newRouteName" ? false : true);
如果路由名称为“ newRouteName”,它将弹出当前路由,然后推送新路由,否则将不会弹出任何内容。