createAppRouter function
- required String initialLocation,
- required ProviderContainer container,
Creates a configured GoRouter starting at initialLocation.
Watches sessionProvider via refreshListenable and redirects to
AppRoutes.login when the session becomes inactive.
Implementation
GoRouter createAppRouter({
required String initialLocation,
required ProviderContainer container,
}) => GoRouter(
navigatorKey: rootNavigatorKey,
initialLocation: initialLocation,
refreshListenable: _SessionRefreshListenable(container),
redirect: (context, state) {
final hasSession = container.read(sessionProvider);
if (hasSession) return null;
if (_publicRoutes.contains(state.matchedLocation)) return null;
return AppRoutes.login;
},
observers: [
?firebaseService.analyticsObserver,
],
routes: [
GoRoute(
path: AppRoutes.intro,
builder: (context, state) => const IntroScreen(),
),
GoRoute(
path: AppRoutes.login,
builder: (context, state) => const LoginScreen(),
),
GoRoute(
path: AppRoutes.about,
builder: (context, state) => const AboutScreen(),
),
GoRoute(
path: AppRoutes.featureFlags,
builder: (context, state) => const FeatureFlagScreen(),
),
StatefulShellRoute(
builder: (context, state, navigationShell) =>
HomeScreen(navigationShell: navigationShell),
navigatorContainerBuilder: (context, navigationShell, children) {
return AnimatedShellContainer(
currentIndex: navigationShell.currentIndex,
children: children,
);
},
branches: [
StatefulShellBranch(
routes: [
GoRoute(
path: AppRoutes.home,
pageBuilder: (context, state) =>
const NoTransitionPage(child: CourseTableScreen()),
),
],
),
StatefulShellBranch(
routes: [
GoRoute(
path: AppRoutes.score,
pageBuilder: (context, state) =>
const NoTransitionPage(child: ScoreScreen()),
),
],
),
StatefulShellBranch(
routes: [
GoRoute(
path: AppRoutes.portal,
pageBuilder: (context, state) =>
const NoTransitionPage(child: PortalScreen()),
),
],
),
StatefulShellBranch(
routes: [
GoRoute(
path: AppRoutes.profile,
pageBuilder: (context, state) =>
const NoTransitionPage(child: ProfileScreen()),
),
],
),
],
),
],
);