Check a page for accessibility
Review supplied markup or descriptions for practical accessibility issues and fixes.
Context-less navigation, named routes, and middleware using GetX.
---
name: flutter-getx-navigation
description: Context-less navigation, named routes, and middleware using GetX.
metadata:
labels: [navigation, getx, routing, middleware]
triggers:
files: ['**/app_pages.dart', '**/app_routes.dart']
keywords: [GetPage, Get.to, Get.off, Get.offAll, Get.toNamed, GetMiddleware]
---
# GetX Navigation
## **Priority: P0 (CRITICAL)**
Decoupled navigation system allowing UI transitions without `BuildContext`.
## Implementation Guidelines
- **Prefer Named Routes**: Use `Get.toNamed('/path')` for better maintainability. Define routes in a centralized `AppPages` class.
- **No Context Navigation**: Leverage `Get.to()`, `Get.back()`, etc., directly from controllers.
- **Navigation Methods**:
- `Get.to()`: Navigate to next screen.
- `Get.off()`: Navigate and replace current screen (e.g., Splash -> Home).
- `Get.offAll()`: Clear stack and navigate (e.g., Logout -> Login).
- `Get.back()`: Close current screen, dialog, or bottom sheet.
- **Bindings Everywhere**: Always link routes with `Bindings` to manage controller lifecycles.
- **Middleware**: Use `GetMiddleware` for route guards (Auth, Permissions) instead of logic inside views.
## Code Example
```dart
// Route Definition
static final routes = [
GetPage(
name: _Paths.HOME,
page: () => HomeView(),
binding: HomeBinding(),
middlewares: [AuthMiddleware()],
),
];
// Usage in Controller
void logout() {
_authService.clear();
Get.offAllNamed(Routes.LOGIN);
}
// Route Guard
class AuthMiddleware extends GetMiddleware {
@override
RouteSettings? redirect(String? route) {
return isAuthenticated ? null : RouteSettings(name: Routes.LOGIN);
}
}
```
## Anti-Patterns
- **Mixing Context and GetX**: Do not use `Navigator.of(context)` when GetX is the primary router.
- **Hardcoded Strings**: Always use a `Routes` constant class for names.
- **Dialogs without GetX**: Use `Get.dialog()` and `Get.snackbar()` for consistency.
## Reference & Examples
For centralized route configuration and middleware guards:
See [references/app-pages.md](references/app-pages.md) and [references/middleware-example.md](references/middleware-example.md).
## Related Topics
getx-state-management | feature-based-clean-architecture
---
name: flutter-getx-navigation
description: Context-less navigation, named routes, and middleware using GetX.
metadata:
labels: [navigation, getx, routing, middleware]
triggers:
files: ['**/app_pages.dart', '**/app_routes.dart']
keywords: [GetPage, Get.to, Get.off, Get.offAll, Get.toNamed, GetMiddleware]
---
# GetX Navigation
## **Priority: P0 (CRITICAL)**
Decoupled navigation system allowing UI transitions without `BuildContext`.
## Implementation Guidelines
- **Prefer Named Routes**: Use `Get.toNamed('/path')` for better maintainability. Define routes in a centralized `AppPages` class.
- **No Context Navigation**: Leverage `Get.to()`, `Get.back()`, etc., directly from controllers.
- **Navigation Methods**:
- `Get.to()`: Navigate to next screen.
- `Get.off()`: Navigate and replace current screen (e.g., Splash -> Home).
- `Get.offAll()`: Clear stack and navigate (e.g., Logout -> Login).
- `Get.back()`: Close current screen, dialog, or bottom sheet.
- **Bindings Everywhere**: Always link routes with `Bindings` to manage controller lifecycles.
- **Middleware**: Use `GetMiddleware` for route guards (Auth, Permissions) instead of logic inside views.
## Code Example
```dart
// Route Definition
static final routes = [
GetPage(
name: _Paths.HOME,
page: () => HomeView(),
binding: HomeBinding(),
middlewares: [AuthMiddleware()],
),
];
// Usage in Controller
void logout() {
_authService.clear();
Get.offAllNamed(Routes.LOGIN);
}
// Route Guard
class AuthMiddleware extends GetMiddleware {
@override
RouteSettings? redirect(String? route) {
return isAuthenticated ? null : RouteSettings(name: Routes.LOGIN);
}
}
```
## Anti-Patterns
- **Mixing Context and GetX**: Do not use `Navigator.of(context)` when GetX is the primary router.
- **Hardcoded Strings**: Always use a `Routes` constant class for names.
- **Dialogs without GetX**: Use `Get.dialog()` and `Get.snackbar()` for consistency.
## Reference & Examples
For centralized route configuration and middleware guards:
See [references/app-pages.md](references/app-pages.md) and [references/middleware-example.md](references/middleware-example.md).
## Related Topics
getx-state-management | feature-based-clean-architecture
Imported from the listed AgentSkill.sh category. Complete supplied package files and notices are retained. Required external tools and credentials are not installed. No bundled code was executed during import. Individual agent task behavior has not been tested.