AutoRoute Navigation
Priority: P1 (HIGH)
Type-safe routing system with code generation using auto_route.
Structure
core/router/
├── app_router.dart # Router configuration
└── app_router.gr.dart # Generated routes
Implementation Workflow
- Annotate pages — Mark all screen/page widgets with
@RoutePage(). - Configure router — Extend
_$AppRouterand annotate with@AutoRouterConfig. - Navigate with types — Use generated route classes (e.g.,
HomeRoute()). Never use strings. - Add guards — Implement
AutoRouteGuardfor authentication/authorization logic. - Handle parameters — Constructors of
@RoutePagewidgets automatically become route parameters. - Prefer declarative calls — Use
context.pushRoute()orcontext.replaceRoute().
Nested Routes & Tabs
Use children in AutoRoute for tabs. Pass the children parameter to define the initial active sub-route.
See implementation examples for nested route navigation and router configuration patterns.
Reference & Examples
For full Router configuration and Auth Guard implementation: See references/REFERENCE.md.
Anti-Patterns
- ❌
Navigator.pushNamed(context, '/orders/123')— always use generated typed route classes (e.g.,OrderDetailRoute(id: 123)) - ❌ Authenticated screen without an
AutoRouteGuard— every protected route must declare a guard; don't rely on UI-level checks alone - ❌
context.router.push(…)called from a BLoC or repository — navigation is a Presentation concern; emit a state and let the UI navigate
Related Topics
go-router-navigation | layer-based-clean-architecture