# GoRouter Quick Reference ## Import ```dart import 'package:minhthu/core/router/app_router.dart'; ``` ## Navigation Commands ### Basic Navigation ```dart // Login page context.goToLogin(); // Warehouses list context.goToWarehouses(); // Operations (requires warehouse) context.goToOperations(warehouse); // Products (requires warehouse and operation type) context.goToProducts( warehouse: warehouse, operationType: 'import', // or 'export' ); // Go back context.goBack(); ``` ### Named Routes (Alternative) ```dart context.goToLoginNamed(); context.goToWarehousesNamed(); context.goToOperationsNamed(warehouse); context.goToProductsNamed( warehouse: warehouse, operationType: 'export', ); ``` ## Common Usage Patterns ### Warehouse Selection → Operations ```dart onTap: () { context.goToOperations(warehouse); } ``` ### Operation Selection → Products ```dart // Import onTap: () { context.goToProducts( warehouse: warehouse, operationType: 'import', ); } // Export onTap: () { context.goToProducts( warehouse: warehouse, operationType: 'export', ); } ``` ### Logout ```dart IconButton( icon: const Icon(Icons.logout), onPressed: () async { await ref.read(authProvider.notifier).logout(); // Router auto-redirects to /login }, ) ``` ## Route Paths | Path | Name | Description | |------|------|-------------| | `/login` | `login` | Login page | | `/warehouses` | `warehouses` | Warehouse list (protected) | | `/operations` | `operations` | Operation selection (protected) | | `/products` | `products` | Product list (protected) | ## Authentication ### Check Status ```dart final isAuth = await SecureStorage().isAuthenticated(); ``` ### Auto-Redirect Rules - Not authenticated → `/login` - Authenticated on `/login` → `/warehouses` - Missing parameters → Previous valid page ## Error Handling ### Missing Parameters ```dart // Automatically redirected to safe page // Error screen shown briefly ``` ### Page Not Found ```dart // Custom 404 page shown // Can navigate back to login ``` ## Complete Example ```dart import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:minhthu/core/router/app_router.dart'; class WarehouseCard extends ConsumerWidget { final WarehouseEntity warehouse; const WarehouseCard({required this.warehouse}); @override Widget build(BuildContext context, WidgetRef ref) { return Card( child: ListTile( title: Text(warehouse.name), subtitle: Text(warehouse.code), trailing: Icon(Icons.arrow_forward), onTap: () { // Navigate to operations context.goToOperations(warehouse); }, ), ); } } ``` ## Tips 1. **Use extension methods** - They provide type safety and auto-completion 2. **Let router handle auth** - Don't manually check authentication in pages 3. **Validate early** - Router validates parameters automatically 4. **Use named routes** - For better route management in large apps ## See Also - Full documentation: `/lib/core/router/README.md` - Setup guide: `/ROUTER_SETUP.md` - Examples: `/lib/features/warehouse/presentation/pages/warehouse_selection_page_example.dart`