如何使用onGenerateRoute将底部导航栏持久化到屏幕



我正在尝试实现一个简单的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,
);
}
}

您可能需要查看带有CupertinoTabBar的CupertinoTabScaffold。显然,他们坚持苹果的设计理念,每个标签都有自己的导航器。然后,即使您从其中一个选项卡的"主页"导航到新的页面,选项卡栏也应保持不变。它们也可以在MaterialApp中使用,所以这不应该是一个问题。

我自己也在努力解决这个问题,因为我正在将一些非常复杂的数据传递给一些生成的路线,并且我正在使用自定义的BottomAppBar进行设计,当我点击选项卡时,它总是会导致我的initialRoute。如果这是你试图克服的问题,那么很抱歉,我还没有这个问题的答案。。。lmk,如果这是你想要实现的,如果我在那时找到了答案,我会删除我的答案/更新!

最新更新