如何使用onGenerateRoute将BottomNavigationBar持久保存到屏幕上?

时间:2020-02-20 06:15:06

标签: flutter flutter-navigation

我正在尝试实现一个简单的BottomNavigationBar来导航动态生成的屏幕。

具有React.js背景,我想到了在屏幕周围有某种包装,其中包含BottomNavigationBar并根据当前路线将屏幕呈现为子级。但是,在定义MaterialApp小部件时,无法附加子级,以便存在BottomNavigationBar并以某种方式环绕onGenerateRoute的屏幕。我看到的唯一其他方法是将我的BottomNavigationBar作为Scaffold中的bottomNavigationBar属性传递到每个屏幕。但这似乎不是最佳选择。

这是我的路由器:

class Router {
  static Route<dynamic> generateRoute(RouteSettings settings) {
    final args = settings.arguments;

    switch (settings.name) {
      case '/':
        return MaterialPageRoute(
          builder: (BuildContext context) => Home(),
        );
      default:
        return MaterialPageRoute(
          builder: (BuildContext context) => Error(),
        );
    }
  }
}

我传递给MaterialApp小部件的onGenerateRoute属性的路由器:

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      initialRoute: '/',
      onGenerateRoute: Router.generateRoute,
    );
  }
}

1 个答案:

答案 0 :(得分:0)

您可能希望将CupertinoTabScaffoldCupertinoTabBar一起使用。显然,他们遵循Apple的设计理念,其中每个选项卡都有自己的导航器。然后,即使您从选项卡之一的“主”页面导航到新/子路线的新页面,选项卡栏也应保持放置状态。它们也可以在MaterialApp中使用,所以这不应该成为问题。

我自己正在为这个问题而苦苦挣扎,因为我正在将一些非常复杂的数据传递给某些生成的路由,并且出于设计目的,我使用了自定义的BottomAppBar,当我单击标签。如果这是您要克服的问题,那么对不起,我还没有答案。如果您要完成此操作,请稍候,如果发现,我将删除答案/更新到那时再回答!