Flutter Flatter如何使用BottomNavigationBar管理单独的导航堆栈?

Flutter Flatter如何使用BottomNavigationBar管理单独的导航堆栈?,flutter,flutter-navigation,Flutter,Flutter Navigation,我真的很困惑flatter如何一次管理多个导航堆栈,并使用BottomNavigationBar在它们之间切换。到目前为止,我已经成功地将我的根Scaffold的主体与小部件交换,并且还可以更改Scaffold上的状态,以更改AppBar标题并设置底部导航BarItem的索引。我还可以看到在MaterialApp上设置routes将如何允许我按下和弹出其他屏幕。问题是,当您使用选项卡栏导航模式时,您希望能够管理单独的堆栈。如果我深入到一个部分并切换选项卡中有3个级别,我希望能够在该特定部分的堆栈

我真的很困惑
flatter
如何一次管理多个导航堆栈,并使用
BottomNavigationBar
在它们之间切换。到目前为止,我已经成功地将我的根
Scaffold
主体
小部件
交换,并且还可以更改
Scaffold
上的状态,以更改
AppBar
标题并设置
底部导航BarItem
的索引。我还可以看到在
MaterialApp
上设置
routes
将如何允许我按下和弹出其他屏幕。问题是,当您使用选项卡栏导航模式时,您希望能够管理单独的堆栈。如果我深入到一个部分并切换选项卡中有3个级别,我希望能够在该特定部分的堆栈中,并且能够在它们之间跳转

这是如何管理与颤振?理想情况下,应用程序应该有一个主应用程序
Scaffold
,用于定义
底部导航栏
抽屉
,以及用于在不同根级别屏幕之间切换的主逻辑。然后,这些屏幕应该为该部分管理自己的
AppBar
和相关的
操作

在我进一步讨论《颤振》之前,我真的很想了解这一点,因为现在,一想到必须用一个
脚手架来管理一切,我就充满了恐惧

我猜,当您使用
Navigator
时,它使用
上下文
将堆栈保持在启动推送的屏幕上下文中,但我仍然不理解它如何将
支架
分开


非常感谢您的见解。

这篇精彩的文章给了我答案:

您需要为主节切换器使用
索引堆栈
,然后使用
小部件
,为每个主节返回一个
导航器
。此
Navigator
设置该部分的路由(如果已知),但可能只是根

我不知道颤振社区是否已经有了导航模式或命名约定,但我已经使用了
$(Section)Navigator
。下面是我为测试创建的
无状态小部件的一个示例:

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的文章,这篇文章帮了大忙。

这可能是答案:-在文章的结尾,他谈到了在每个屏幕上使用单独的导航器。