/// App Router Configuration /// /// Centralized routing configuration using go_router. /// Defines all routes, navigation guards, and deep linking. library; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:worker/features/home/presentation/pages/home_page.dart'; /// App Router /// /// Handles navigation throughout the app using declarative routing. /// Features: /// - Named routes for type-safe navigation /// - Authentication guards (TODO: implement when auth is ready) /// - Deep linking support /// - Transition animations class AppRouter { /// Router configuration static final GoRouter router = GoRouter( // Initial route initialLocation: RouteNames.home, // Route definitions routes: [ // Home Route GoRoute( path: RouteNames.home, name: RouteNames.home, pageBuilder: (context, state) => MaterialPage( key: state.pageKey, child: const HomePage(), ), ), // TODO: Add more routes as features are implemented // Example: // GoRoute( // path: RouteNames.products, // name: RouteNames.products, // pageBuilder: (context, state) => MaterialPage( // key: state.pageKey, // child: const ProductsPage(), // ), // ), ], // Error page for unknown routes errorPageBuilder: (context, state) => MaterialPage( key: state.pageKey, child: Scaffold( appBar: AppBar( title: const Text('Không tìm thấy trang'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ const Icon( Icons.error_outline, size: 64, color: Colors.red, ), const SizedBox(height: 16), const Text( 'Trang không tồn tại', style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), ), const SizedBox(height: 8), Text( state.uri.toString(), style: const TextStyle(color: Colors.grey), ), const SizedBox(height: 24), ElevatedButton.icon( onPressed: () => context.go(RouteNames.home), icon: const Icon(Icons.home), label: const Text('Về trang chủ'), ), ], ), ), ), ), // Redirect logic for authentication (TODO: implement when auth is ready) // redirect: (context, state) { // final isLoggedIn = false; // TODO: Get from auth provider // final isOnLoginPage = state.matchedLocation == RouteNames.login; // // if (!isLoggedIn && !isOnLoginPage) { // return RouteNames.login; // } // // if (isLoggedIn && isOnLoginPage) { // return RouteNames.home; // } // // return null; // }, // Debug logging (disable in production) debugLogDiagnostics: true, ); } /// Route Names /// /// Centralized route name constants for type-safe navigation. /// Use these constants instead of hardcoded strings. /// /// Example: /// ```dart /// context.go(RouteNames.home); /// context.push(RouteNames.products); /// ``` class RouteNames { // Private constructor to prevent instantiation RouteNames._(); // Main Routes static const String home = '/'; static const String products = '/products'; static const String productDetail = '/products/:id'; static const String cart = '/cart'; static const String checkout = '/checkout'; static const String orderSuccess = '/order-success'; // Loyalty Routes static const String loyalty = '/loyalty'; static const String rewards = '/loyalty/rewards'; static const String pointsHistory = '/loyalty/points-history'; static const String myGifts = '/loyalty/gifts'; static const String referral = '/loyalty/referral'; // Orders & Payments Routes static const String orders = '/orders'; static const String orderDetail = '/orders/:id'; static const String payments = '/payments'; // Projects & Quotes Routes static const String projects = '/projects'; static const String projectDetail = '/projects/:id'; static const String projectCreate = '/projects/create'; static const String quotes = '/quotes'; static const String quoteDetail = '/quotes/:id'; static const String quoteCreate = '/quotes/create'; // Account Routes static const String account = '/account'; static const String profile = '/account/profile'; static const String addresses = '/account/addresses'; static const String addressForm = '/account/addresses/form'; static const String changePassword = '/account/change-password'; static const String settings = '/account/settings'; // Promotions & Notifications Routes static const String promotions = '/promotions'; static const String promotionDetail = '/promotions/:id'; static const String notifications = '/notifications'; // Chat Route static const String chat = '/chat'; // Authentication Routes (TODO: implement when auth feature is ready) static const String login = '/login'; static const String otpVerification = '/otp-verification'; static const String register = '/register'; } /// Route Extensions /// /// Helper extensions for common navigation patterns. extension GoRouterExtension on BuildContext { /// Navigate to home page void goHome() => go(RouteNames.home); /// Navigate to products page void goProducts() => go(RouteNames.products); /// Navigate to cart page void goCart() => go(RouteNames.cart); /// Navigate to loyalty page void goLoyalty() => go(RouteNames.loyalty); /// Navigate to orders page void goOrders() => go(RouteNames.orders); /// Navigate to projects page void goProjects() => go(RouteNames.projects); /// Navigate to account page void goAccount() => go(RouteNames.account); /// Navigate to promotions page void goPromotions() => go(RouteNames.promotions); /// Navigate to notifications page void goNotifications() => go(RouteNames.notifications); /// Navigate to chat page void goChat() => go(RouteNames.chat); }