我有底部导航栏的视图,当您按下导航栏项目时,新的路线将被推送到视图中。
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]);
}
Run Code Online (Sandbox Code Playgroud)
我想防止在当前视图上推送相同的路由。我想将当前路线与我们尝试推入的新路线进行比较,如果相同则忽略推入路线。
如果要尝试的路线与我相同,我想将视图滚动到顶部
有任何想法吗。
来自网络背景(角度),我真的对颤振路由感到困惑。
从答案的相对复杂性以及与其中一些答案相关的各种错误来看,我想知道我是否只是想使用导航器作为它不是的东西。我尝试像使用网络框架的路由器一样使用它。如果 flutter 中的路由旨在更改整个屏幕而不是子窗口小部件。
在 Web 上,以下导航将类似于以下内容:
{ path: '/sign-in', widget: SignInPage() },
{ path: '/', widget: HomePage(), children: [
{ path: '/a', widget: DashboardPage() },
{ path: '/b', widget: ProfilePage(), children: [
{ path: '/general', widget: BGeneralPage() },
{ path: '/settings', widget: BSettingsPage() },
] }
] }
// example url x.com/b/settings
Run Code Online (Sandbox Code Playgroud)
在flutter中你可以放置一个嵌套的Navigator,但是热重载似乎失败了,而且默认动画也很垃圾。甚至嵌套导航的文档也说<<仅使用单个导航器就可以获得类似的结果>>。
在我看来,路由系统是为了在我们想要更改整个屏幕时使用的。PageView和TabBarView是用于内部导航的小部件。
- 是这样吗?
然而,我发现一个潜在的问题是,当 flutter web 可用时,它不会有匹配的 url。