routes.dart 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_riverpod/flutter_riverpod.dart';
  3. import 'package:go_router/go_router.dart';
  4. import '../../providers/auth_provider.dart';
  5. import 'pages/login/init_page.dart';
  6. import 'pages/login/login_page.dart';
  7. import 'pages/dashboard/dashboard_page.dart';
  8. import 'pages/orders/order_list_page.dart';
  9. import 'pages/orders/order_edit_page.dart';
  10. import 'pages/customers/customer_list_page.dart';
  11. import 'pages/customers/customer_detail_page.dart';
  12. import 'pages/catalog/catalog_page.dart';
  13. import 'pages/promotions/promotion_list_page.dart';
  14. import 'pages/payments/payments_page.dart';
  15. import 'pages/statistics/statistics_page.dart';
  16. import 'pages/sync/sync_page.dart';
  17. import 'pages/sync/sync_settings_page.dart';
  18. final routerProvider = Provider<GoRouter>((ref) {
  19. final authState = ref.watch(authProvider);
  20. return GoRouter(
  21. initialLocation: '/login',
  22. redirect: (context, state) {
  23. final isLogin = state.matchedLocation == '/login';
  24. final isInit = state.matchedLocation == '/init';
  25. if (!authState.isInitialized && !isInit) return '/init';
  26. if (authState.isInitialized && !authState.isLoggedIn && !isLogin) return '/login';
  27. if (authState.isLoggedIn && isLogin) return '/dashboard';
  28. if (authState.isLoggedIn && isInit) return '/dashboard';
  29. return null;
  30. },
  31. routes: [
  32. GoRoute(path: '/init', builder: (_, __) => const InitPage()),
  33. GoRoute(path: '/login', builder: (_, __) => const LoginPage()),
  34. GoRoute(
  35. path: '/dashboard',
  36. builder: (_, __) => const DashboardPage(),
  37. routes: [
  38. GoRoute(path: 'orders', builder: (_, __) => const OrderListPage()),
  39. GoRoute(path: 'orders/new', builder: (_, state) {
  40. final idCliente = int.tryParse(state.uri.queryParameters['cliente'] ?? '');
  41. return OrderEditPage(idCliente: idCliente);
  42. }),
  43. GoRoute(path: 'orders/:id', builder: (_, state) => OrderEditPage(id: int.parse(state.pathParameters['id']!))),
  44. GoRoute(path: 'customers', builder: (_, __) => const CustomerListPage()),
  45. GoRoute(path: 'customers/:id', builder: (_, state) => CustomerDetailPage(id: int.parse(state.pathParameters['id']!))),
  46. GoRoute(path: 'catalog', builder: (_, __) => const CatalogPage()),
  47. GoRoute(path: 'promotions', builder: (_, __) => const PromotionListPage()),
  48. GoRoute(path: 'payments', builder: (_, __) => const PaymentsPage()),
  49. GoRoute(path: 'statistics', builder: (_, __) => const StatisticsPage()),
  50. GoRoute(path: 'sync', builder: (_, __) => const SyncPage()),
  51. GoRoute(path: 'sync/settings', builder: (_, __) => const SyncSettingsPage()),
  52. ],
  53. ),
  54. ],
  55. );
  56. });