| name | flutter-navigation |
| description | Implement route configuration, go_router/deep linking, and named routes in Flutter. Use for route declarations, route guards, and URL-to-screen mapping; defer transition-only animation, state-transfer/BLoC questions, auto_route-specific setup, and generic app-bar controls. |
| metadata | {"triggers":{"files":["**/*_route.dart","**/*_router.dart","**/main.dart"],"keywords":["Navigator","GoRouter","routes","deep link","go_router","AutoRoute"]}} |
Flutter Navigation
Priority: P1 (HIGH)
Implementation Workflow
- Choose router — Use
go_router for modern, declarative routing.
- Define routes — Use constants or code generation for route paths; never hardcode strings.
- Configure deep links — Set up
AndroidManifest.xml and the iOS URL-type settings for app URL schemes.
- Validate parameters — Check parameters in
redirect logic before navigation.
- Preserve tab state — Use
StatefulShellRoute or IndexedStack for bottom navigation.
Route Configuration Example
See implementation examples for GoRouter configuration with parameter validation and redirects.
Routing Patterns & Examples
Anti-Patterns
- No Manual URL Parsing: Use
go_router built-in parsing instead of Uri.parse(url)
- No Manual Tab State Management: Use
IndexedStack or StatefulShellRoute to preserve state
- No Unvalidated Deep Link IDs: Always check existence in
redirect
- No Hardcoded Route Strings: Use constants (e.g.,
Routes.orders) or code-gen instead of '/orders'
Related Topics
flutter-design-system | flutter-notifications | mobile-ux-core
Canonical response anchors
When this skill applies, preserve the following domain terminology or equivalent concrete examples in the answer when relevant: