import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; import '../../providers/auth_provider.dart'; import 'pages/login/init_page.dart'; import 'pages/login/login_page.dart'; import 'pages/dashboard/dashboard_page.dart'; import 'pages/orders/order_list_page.dart'; import 'pages/orders/order_edit_page.dart'; import 'pages/customers/customer_list_page.dart'; import 'pages/customers/customer_detail_page.dart'; import 'pages/catalog/catalog_page.dart'; import 'pages/promotions/promotion_list_page.dart'; import 'pages/payments/payments_page.dart'; import 'pages/statistics/statistics_page.dart'; import 'pages/sync/sync_page.dart'; import 'pages/sync/sync_settings_page.dart'; final routerProvider = Provider((ref) { final authState = ref.watch(authProvider); return GoRouter( initialLocation: '/login', redirect: (context, state) { final isLogin = state.matchedLocation == '/login'; final isInit = state.matchedLocation == '/init'; final isSyncSettings = state.matchedLocation == '/sync-settings'; if (!authState.isInitialized && !isInit && !isSyncSettings) { return '/init'; } if (authState.isInitialized && !authState.isLoggedIn && !isLogin && !isSyncSettings) { return '/login'; } if (authState.isLoggedIn && isLogin) return '/dashboard'; if (authState.isLoggedIn && isInit) return '/dashboard'; return null; }, routes: [ GoRoute(path: '/init', builder: (_, __) => const InitPage()), GoRoute(path: '/login', builder: (_, __) => const LoginPage()), GoRoute( path: '/sync-settings', builder: (_, __) => const SyncSettingsPage(), ), GoRoute( path: '/dashboard', builder: (_, __) => const DashboardPage(), routes: [ GoRoute(path: 'orders', builder: (_, __) => const OrderListPage()), GoRoute( path: 'orders/new', builder: (_, state) { final idCliente = int.tryParse( state.uri.queryParameters['cliente'] ?? '', ); return OrderEditPage(idCliente: idCliente); }, ), GoRoute( path: 'orders/:id', builder: (_, state) => OrderEditPage(id: int.parse(state.pathParameters['id']!)), ), GoRoute( path: 'customers', builder: (_, __) => const CustomerListPage(), ), GoRoute( path: 'customers/:id', builder: (_, state) => CustomerDetailPage(id: int.parse(state.pathParameters['id']!)), ), GoRoute(path: 'catalog', builder: (_, __) => const CatalogPage()), GoRoute( path: 'promotions', builder: (_, __) => const PromotionListPage(), ), GoRoute(path: 'payments', builder: (_, __) => const PaymentsPage()), GoRoute( path: 'statistics', builder: (_, __) => const StatisticsPage(), ), GoRoute(path: 'sync', builder: (_, __) => const SyncPage()), GoRoute( path: 'sync/settings', builder: (_, __) => const SyncSettingsPage(), ), ], ), ], ); });