0
0
Fluttermobile~20 mins

GoRouter package in Flutter - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
GoRouter Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
navigation
intermediate
2:00remaining
Understanding Basic Route Definition in GoRouter
Given the following GoRouter configuration, what is the initial screen shown when the app starts?
Flutter
final router = GoRouter(
  initialLocation: '/home',
  routes: [
    GoRoute(
      path: '/home',
      builder: (context, state) => const HomeScreen(),
    ),
    GoRoute(
      path: '/settings',
      builder: (context, state) => const SettingsScreen(),
    ),
  ],
);
AApp shows a blank screen
BSettingsScreen widget is displayed
CApp crashes with a routing error
DHomeScreen widget is displayed
Attempts:
2 left
💡 Hint
Look at the initialLocation property in the GoRouter setup.
ui_behavior
intermediate
2:00remaining
Passing Parameters with GoRouter
What will be the output on the DetailsScreen when navigating to '/details/42' with this GoRouter setup?
Flutter
final router = GoRouter(
  routes: [
    GoRoute(
      path: '/details/:id',
      builder: (context, state) {
        final id = state.params['id'];
        return DetailsScreen(id: id!);
      },
    ),
  ],
);

// DetailsScreen widget shows text: 'Item ID: <id>'
ADetailsScreen shows 'Item ID: 42'
BDetailsScreen shows 'Item ID: null'
CApp throws a runtime error due to missing id
DDetailsScreen shows 'Item ID: /details/42'
Attempts:
2 left
💡 Hint
Check how the parameter is extracted from state.params.
lifecycle
advanced
2:00remaining
GoRouter Refresh Listenable Behavior
If you want the GoRouter to rebuild routes when a user logs in or out, which of these is the correct way to trigger route refresh?
Flutter
class AuthNotifier extends ChangeNotifier {
  bool _loggedIn = false;
  bool get loggedIn => _loggedIn;
  void login() {
    _loggedIn = true;
    notifyListeners();
  }
  void logout() {
    _loggedIn = false;
    notifyListeners();
  }
}

final authNotifier = AuthNotifier();

final router = GoRouter(
  refreshListenable: authNotifier,
  routes: [
    GoRoute(
      path: '/profile',
      builder: (context, state) => ProfileScreen(),
    ),
  ],
);
ARecreate GoRouter instance manually after login/logout
BCall notifyListeners() on AuthNotifier to refresh routes
CUse setState() in main widget to refresh GoRouter
DNo need to refresh; GoRouter updates automatically
Attempts:
2 left
💡 Hint
refreshListenable listens for notifyListeners calls.
📝 Syntax
advanced
2:00remaining
Correct Syntax for Nested Routes in GoRouter
Which option correctly defines nested routes for '/dashboard' and '/dashboard/settings' using GoRouter?
AGoRoute(path: '/dashboard', builder: (c,s) => Dashboard(), children: [GoRoute(path: 'settings', builder: (c,s) => Settings())])
BGoRoute(path: '/dashboard', builder: (c,s) => Dashboard()), GoRoute(path: '/dashboard/settings', builder: (c,s) => Settings())
CGoRoute(path: '/dashboard', builder: (c,s) => Dashboard(), routes: [GoRoute(path: 'settings', builder: (c,s) => Settings())])
DGoRoute(path: '/dashboard', builder: (c,s) => Dashboard(), routes: [GoRoute(path: '/settings', builder: (c,s) => Settings())])
Attempts:
2 left
💡 Hint
Nested routes use relative paths without leading slash in 'routes' list.
🔧 Debug
expert
2:00remaining
Identifying the Cause of a GoRouter Navigation Error
You get this error when navigating: 'Could not find a matching route for the path /profile'. Given this GoRouter setup, what is the cause?
Flutter
final router = GoRouter(
  routes: [
    GoRoute(
      path: '/home',
      builder: (context, state) => HomeScreen(),
    ),
    GoRoute(
      path: '/settings',
      builder: (context, state) => SettingsScreen(),
    ),
  ],
);
AThere is no route defined for '/profile' in the routes list
BThe '/profile' route is defined but missing a builder function
CThe initialLocation is set incorrectly to '/profile'
DThe GoRouter instance is not assigned to MaterialApp.router
Attempts:
2 left
💡 Hint
Check if '/profile' is listed in the routes.