home / skills / hoangnguyen0403 / agent-skills-standard / go-router-navigation
This skill ensures type-safe navigation with go_router in Flutter apps, providing typed routes, redirection, and transitions for reliable routing.
npx playbooks add skill hoangnguyen0403/agent-skills-standard --skill go-router-navigationReview the files below or copy the command above to add this skill to your agents.
---
name: Flutter GoRouter Navigation
description: Typed routes, route state, and redirection using go_router.
metadata:
labels: [navigation, go-router, routing]
triggers:
files: ['**/router.dart', '**/app_router.dart']
keywords: [GoRouter, GoRoute, StatefulShellRoute, redirection, typed-routes]
---
# GoRouter Navigation
## **Priority: P0 (CRITICAL)**
Type-safe deep linking and routing system using `go_router` and `go_router_builder`.
## Structure
```text
core/router/
├── app_router.dart # Router configuration
└── routes.dart # Typed route definitions (GoRouteData)
```
## Implementation Guidelines
- **Typed Routes**: Always use `GoRouteData` from `go_router_builder`. Never use raw path strings.
- **Root Router**: One global `GoRouter` instance registered in DI.
- **Sub-Routes**: Nest related routes using `TypedGoRoute` and children lists.
- **Redirection**: Handle Auth (Login check) in the `redirect` property of the `GoRouter` config.
- **Parameters**: Use `@TypedGoRoute` to define paths with `:id` parameters.
- **Transitions**: Define standard transitions (Fade, Slide) in `buildPage`.
- **Navigation**: Use `MyRoute().go(context)` or `MyRoute().push(context)`.
## Code
```dart
// Route Definition
@TypedGoRoute<HomeRoute>(path: '/')
class HomeRoute extends GoRouteData {
@override
Widget build(context, state) => const HomePage();
}
// Router Config
final router = GoRouter(
routes: $appRoutes,
redirect: (context, state) {
if (notAuthenticated) return '/login';
return null;
},
);
```
## Related Topics
layer-based-clean-architecture | auto-route-navigation | security
This skill packages best practices for implementing type-safe navigation in Flutter using go_router and go_router_builder. It prioritizes typed routes, centralized router configuration, and clear redirection and parameter handling to reduce runtime routing errors. The guidance is practical and focused on maintainable route structures and predictable auth flows.
The skill enforces typed route definitions via GoRouteData and @TypedGoRoute annotations instead of raw path strings. It recommends a single global GoRouter registered in dependency injection, with nested TypedGoRoute children for related screens and a redirect callback for auth-based navigation. Standard transitions and navigation helpers (.go/.push) are suggested for consistent behavior.
Why use typed routes instead of string paths?
Typed routes provide compile-time checks for parameters and refactors, reducing runtime errors and making code easier to navigate.
Where should I handle login redirection?
Handle auth checks and redirection in the GoRouter redirect callback so routing decisions are centralized and widgets stay presentation-focused.