routes.dart 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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. final isSyncSettings = state.matchedLocation == '/sync-settings';
  26. if (!authState.isInitialized && !isInit && !isSyncSettings) {
  27. return '/init';
  28. }
  29. if (authState.isInitialized &&
  30. !authState.isLoggedIn &&
  31. !isLogin &&
  32. !isSyncSettings) {
  33. return '/login';
  34. }
  35. if (authState.isLoggedIn && isLogin) return '/dashboard';
  36. if (authState.isLoggedIn && isInit) return '/dashboard';
  37. return null;
  38. },
  39. routes: [
  40. GoRoute(path: '/init', builder: (_, __) => const InitPage()),
  41. GoRoute(path: '/login', builder: (_, __) => const LoginPage()),
  42. GoRoute(
  43. path: '/sync-settings',
  44. builder: (_, __) => const SyncSettingsPage(),
  45. ),
  46. GoRoute(
  47. path: '/dashboard',
  48. builder: (_, __) => const DashboardPage(),
  49. routes: [
  50. GoRoute(path: 'orders', builder: (_, __) => const OrderListPage()),
  51. GoRoute(
  52. path: 'orders/new',
  53. builder: (_, state) {
  54. final idCliente = int.tryParse(
  55. state.uri.queryParameters['cliente'] ?? '',
  56. );
  57. return OrderEditPage(idCliente: idCliente);
  58. },
  59. ),
  60. GoRoute(
  61. path: 'orders/:id',
  62. builder: (_, state) =>
  63. OrderEditPage(id: int.parse(state.pathParameters['id']!)),
  64. ),
  65. GoRoute(
  66. path: 'customers',
  67. builder: (_, __) => const CustomerListPage(),
  68. ),
  69. GoRoute(
  70. path: 'customers/:id',
  71. builder: (_, state) =>
  72. CustomerDetailPage(id: int.parse(state.pathParameters['id']!)),
  73. ),
  74. GoRoute(path: 'catalog', builder: (_, __) => const CatalogPage()),
  75. GoRoute(
  76. path: 'promotions',
  77. builder: (_, __) => const PromotionListPage(),
  78. ),
  79. GoRoute(path: 'payments', builder: (_, __) => const PaymentsPage()),
  80. GoRoute(
  81. path: 'statistics',
  82. builder: (_, __) => const StatisticsPage(),
  83. ),
  84. GoRoute(path: 'sync', builder: (_, __) => const SyncPage()),
  85. GoRoute(
  86. path: 'sync/settings',
  87. builder: (_, __) => const SyncSettingsPage(),
  88. ),
  89. ],
  90. ),
  91. ],
  92. );
  93. });