What is the best approach to handle routing with GoRoute and ShellRoute.
I have 3 screens.
Setting – show full screen
A – show with a Bottom Navigation (wrapped with Shelled Route)
B – show with a Bottom Navigation (wrapped with Shelled Route)
The only issue I encounter in this config is a missing back button when I go to Settings screen. How can I fix it?
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'),
),
],
),
],
),
],
);
2
Answers
To have a back button there is 2 paths you can follow.
If you use push the back button will take you back to the previous page.
So i would recommend using push when navigating to the settings page
Present mistakes in the code.
context.go('/someRoute')
for pushing page to the stackparentNavigatorKey
prop of GoRoute.Possible solutions:
Use
context.push('/someRoute')
to push the page to the stack, only then you can see the back button in the pushed page.Use
parentNavigatorKey
property in eachroute
and specify explicitly where the presentGoRoute
lies .ShellRoute
:parentNavigatorKey:_shellNavigatorKey
MainRoute
:parentNavigatorKey:_rootNavigatorKey
Updated
settings
route:Now you will get rid of the
bottomNavigationBar
which lies inside theShellRoute
.Refer detailed code and explaination of bottom NavigationBar using
ShellRoute
andGoRouter
here