使用GoRoute和ShellRoute处理路由的最佳方法是什么?
我有3个屏幕。设置-显示全屏A -显示底部导航(用 shell 路线包裹)B -显示底部导航(用 shell 路线包裹)
我在这个配置中遇到的唯一问题是当我进入设置屏幕时缺少一个后退按钮。我该如何修复它?
final goRouter = GoRouter(
initialLocation: '/a',
navigatorKey: _rootNavigatorKey,
routes: [
GoRoute( // = Do not show Bottom Navigation, just a full screen
path: '/settings',
pageBuilder: (context, state) => const NoTransitionPage(
child: SettingsPage(),
),
),
ShellRoute( // ShellRoute = Show Bottom Navigation
navigatorKey: _shellNavigatorKey,
builder: (context, state, child) {
return ScaffoldWithBottomNavigation(
tabs: tabs,
child: child,
);
},
routes: [
GoRoute(
path: '/a',
pageBuilder: (context, state) => const NoTransitionPage(
child: HomeScreen(label: 'A', detailsPath: '/a/details'),
),
routes: [
GoRoute(
path: 'details',
builder: (context, state) => const DetailsScreen(label: 'A'),
),
],
),
GoRoute(
path: '/b',
pageBuilder: (context, state) => const NoTransitionPage(
child: HomeScreen(label: 'B', detailsPath: '/b/details'),
),
routes: [
GoRoute(
path: 'details',
builder: (context, state) => const DetailsScreen(label: 'B'),
),
],
),
],
),
],
);
1条答案
按热度按时间s6fujrry1#
要有一个后退按钮有2个路径,你可以遵循。
1.使用push而不是go:
如果您使用,请按“后退”按钮返回上一页。
1.使用转到子路径,因此您的病例设置页面需要是另一页面的子路径,如果用户可以访问设置的路径有多个,则可能不可行。
因此,我建议在导航到设置页面时使用推送