我对Flutter
如何一次管理多个导航堆栈以及如何使用BottomNavigationBar
在它们之间切换感到困惑。到目前为止,我已经设法将根body
的{{1}}交换为Scaffold
,并且还可以更改Widget
上的状态来更改Scaffold
标题并设置AppBar
的索引。我还可以看到在BottomNavigationBarItem
上设置routes
将如何推动和弹出其他屏幕。问题是,当您有一个标签栏导航模式时,您希望能够管理单独的堆栈。如果我深入某个部分并切换选项卡有3个级别,那么我希望该部分位于该堆栈中,并且能够在它们之间跳转。
如何使用Flutter进行管理?理想情况下,该应用程序应具有一个主应用程序MaterialApp
来定义Scaffold
,BottomNavigationBar
以及用于在不同根级别屏幕之间进行切换的主要逻辑。然后,这些屏幕应该为该部分管理自己的Drawer
和相关的AppBar
。
在继续使用actions
之前,我真的很想了解这一点,因为现在,不得不用一个Flutter
管理所有内容的想法使我感到恐惧。
我猜想,当您使用Scaffold
时,它会使用Navigator
来将堆栈保持在启动推送的屏幕上下文中,但是我仍然不明白它如何保持推送Context
分开。
任何见识都会受到赞赏。
答案 0 :(得分:1)
这篇精彩的文章给了我答案:https://medium.com/flutter/getting-to-the-bottom-of-navigation-in-flutter-b3e440b9386
您需要将IndexedStack
用于主要部分切换器,然后使用Widget
来为每个主要部分返回Navigator
。 Navigator
设置了该部分的路由(如果知道的话),但是可能只是其根。
我不知道Flutter社区是否已经使用了导航模式或命名约定,但是我使用了$(Section)Navigator
。这是我为测试创建的StatelessWidget
的示例:
class DashboardNavigator extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Navigator(
onGenerateRoute: (RouteSettings settings) {
return MaterialPageRoute(
settings: settings,
builder: (BuildContext context) {
switch (settings.name) {
case '/':
return DashboardRoot();
case '/login':
return ScreenLogin(destination: allDestinations[0]);
default:
return DashboardRoot();
}
},
);
},
);
}
}
这主要来自Hans Muller的文章,对我们很有帮助。