我正在创建一个带有底部导航器的应用程序。我使用了一个ShellRoute
,但我们的要求是在屏幕上隐藏底部导航器。例如:当我转到另一个屏幕(如用户配置文件页面)时,主页可以有底部导航器,我必须隐藏底部导航器,但我在同一个ShellRoute
中使用ShellRoute
和子路由,它不会隐藏底部导航器。
ShellRoute(
navigatorKey: _shellNavigatorKey,
builder: (context, state, child) {
return MainScreen(child: child);
},
routes: [
GoRoute(
path: '/$dashboardRouteName',
name: dashboardRouteName,
pageBuilder: (context, state) => CustomPageRouteBuilder.route(
key: UniqueKey(),
child: const DashboardScreen(),
),
routes: [
GoRoute(
path: leaveRequestRouteName,
name: '$dashboardRouteName/$leaveRequestRouteName',
pageBuilder: (context, state) => CustomPageRouteBuilder.route(
key: state.pageKey,
child: const LeaveRequestScreen(),
),
),
GoRoute(
path: switchHolidayRouteName,
name: '$dashboardRouteName/$switchHolidayRouteName',
pageBuilder: (context, state) => CustomPageRouteBuilder.route(
key: state.pageKey,
child: const SwitchHolidayScreen(),
),
),
],
),
然后,我将子路由分解为如下的总路由:
ShellRoute(
navigatorKey: _shellNavigatorKey,
builder: (context, state, child) {
return MainScreen(child: child);
},
routes: [
GoRoute(
path: '/$dashboardRouteName',
name: dashboardRouteName,
pageBuilder: (context, state) => CustomPageRouteBuilder.route(
key: UniqueKey(),
child: const DashboardScreen(),
),
),
....
GoRoute(
path: '/$switchHolidayRouteName',
name: switchHolidayRouteName,
pageBuilder: (context, state) => CustomPageRouteBuilder.route(
key: state.pageKey,
child: const SwitchHolidayScreen(),
),
),
GoRoute(
path: '/$leaveRequestRouteName',
name: leaveRequestRouteName,
pageBuilder: (context, state) => CustomPageRouteBuilder.route(
key: state.pageKey,
child: const LeaveRequestScreen(),
),
),
我使用context.go()
,它工作正常,但我无法使用context.pop()
返回上一屏幕。
有人知道吗?
3条答案
按热度按时间5sxhfpxr1#
我试过这种方法,它工作。使用_navigatorKey和parentnavigatorKey
7cwmlq892#
在定义导航栏主屏幕中,使用
GoRouter.of(context).location
检查当前位置。如果您的位置不在bottomNavigationBar应该显示的位置,则返回Sizedbox或null,否则返回BottomNavigationBar。tzdcorbm3#
这通常发生在
page
不知道它的父对象的时候。指定在
GoRoute
中使用parentNavigatorKey
代码结构:
建议
您的当前代码:
将其更改为:
ShellRoute
和GoRouter
here参考底部导航栏的详细代码和说明 *