Reputation: 330
What is the best approach to handle routing with GoRoute and ShellRoute.
I have 3 screens:
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'),
),
],
),
],
),
],
);
Upvotes: 6
Views: 6209
Reputation: 24910
context.go('/someRoute')
for pushing page to the stackparentNavigatorKey
prop of GoRoute.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 each route
and specify explicitly where the present GoRoute
lies .
ShellRoute
: parentNavigatorKey:_shellNavigatorKey
MainRoute
: parentNavigatorKey:_rootNavigatorKey
settings
route:GoRoute(
parentNavigatorKey:_rootNavigatorKey 👈 Specify explicity that settings page lies in the Main Route
path: '/settings',
pageBuilder: (context, state) => const NoTransitionPage(
child: SettingsPage(),
),
),
Now you will get rid of the bottomNavigationBar
which lies inside the ShellRoute
.
Refer detailed code and explaination of bottom NavigationBar using ShellRoute
and GoRouter
here
Upvotes: 12
Reputation: 908
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
Upvotes: 4