auth_provider.dart 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. import 'package:flutter_riverpod/flutter_riverpod.dart';
  2. import 'package:ristoris/ui/pages/payments/payments_page.dart';
  3. import '../../core/constants.dart';
  4. import '../../database/database.dart';
  5. import 'database_provider.dart';
  6. import '../../services/auth_service.dart';
  7. import 'article_provider.dart';
  8. import 'customer_provider.dart';
  9. import 'dashboard_provider.dart';
  10. import 'order_provider.dart';
  11. import 'sync_provider.dart';
  12. const _kRememberedUsername = 'REMEMBERED_USERNAME';
  13. const _kRememberedPassword = 'REMEMBERED_PASSWORD';
  14. class AuthState {
  15. final Agente? agente;
  16. final bool isLoading;
  17. final bool isInitialized;
  18. final String? error;
  19. const AuthState({
  20. this.agente,
  21. this.isLoading = false,
  22. this.isInitialized = false,
  23. this.error,
  24. });
  25. bool get isLoggedIn => agente != null;
  26. }
  27. final authServiceProvider = Provider<AuthService>((ref) {
  28. return AuthService(
  29. ref.read(agentiDaoProvider),
  30. ref.read(apiServiceProvider),
  31. ref.read(parametriDaoProvider),
  32. );
  33. });
  34. class AuthNotifier extends Notifier<AuthState> {
  35. @override
  36. AuthState build() {
  37. _checkInitialized();
  38. return const AuthState();
  39. }
  40. Future<void> _checkInitialized() async {
  41. final authService = ref.read(authServiceProvider);
  42. final initialized = await authService.isInitialized();
  43. state = AuthState(isInitialized: initialized);
  44. }
  45. Future<void> login(
  46. String code,
  47. String password,
  48. String url, {
  49. bool rememberMe = false,
  50. }) async {
  51. state = const AuthState(isLoading: true);
  52. try {
  53. final dao = ref.read(parametriDaoProvider);
  54. await dao.set(AppConstants.kUrlParam, url);
  55. final authService = ref.read(authServiceProvider);
  56. //print("Attempting login with code: $code, password: $password, url: $url");
  57. final agente = await authService.login(code, password);
  58. print(agente);
  59. if (agente != null) {
  60. state = AuthState(agente: agente, isInitialized: true);
  61. if (rememberMe) {
  62. await dao.set(_kRememberedUsername, code);
  63. await dao.set(_kRememberedPassword, password);
  64. } else {
  65. await dao.set(_kRememberedUsername, '');
  66. await dao.set(_kRememberedPassword, '');
  67. }
  68. } else {
  69. state = const AuthState(
  70. error: 'Codice agente o password errati',
  71. isInitialized: true,
  72. );
  73. }
  74. } catch (e) {
  75. state = AuthState(error: e.toString(), isInitialized: true);
  76. }
  77. }
  78. Future<void> initialize({
  79. required int idAgente,
  80. required String codAgente,
  81. required String password,
  82. String? ragioneSociale,
  83. required String url,
  84. }) async {
  85. state = const AuthState(isLoading: true);
  86. try {
  87. final authService = ref.read(authServiceProvider);
  88. await authService.initializeAgent(
  89. idAgente: idAgente,
  90. codAgente: codAgente,
  91. pwd: password,
  92. ragioneSociale: ragioneSociale,
  93. url: url,
  94. );
  95. final agente = await authService.login(codAgente, password);
  96. state = AuthState(agente: agente, isInitialized: true);
  97. } catch (e) {
  98. state = AuthState(error: e.toString(), isInitialized: true);
  99. }
  100. }
  101. void logout() {
  102. state = const AuthState(isInitialized: true);
  103. }
  104. Future<void> switchAgent(Agente newAgent) async {
  105. final agentiDao = ref.read(agentiDaoProvider);
  106. final agente = await agentiDao.authenticate(
  107. newAgent.codAgente ?? '',
  108. newAgent.pwd ?? '',
  109. );
  110. if (agente != null) {
  111. state = AuthState(agente: agente, isInitialized: true);
  112. ref.invalidate(articleSearchProvider);
  113. ref.invalidate(activeArticleSearchProvider);
  114. ref.invalidate(priceCodesProvider);
  115. ref.invalidate(customerListProvider);
  116. ref.invalidate(customerSearchProvider);
  117. ref.invalidate(customerDestinationsProvider);
  118. ref.invalidate(customerPaymentsProvider);
  119. ref.invalidate(ordersViewProvider);
  120. ref.invalidate(ordersSearchViewProvider);
  121. ref.invalidate(orderStatsProvider);
  122. ref.invalidate(orderProvider);
  123. ref.invalidate(dashboardProvider);
  124. ref.invalidate(paymentsProvider);
  125. ref.invalidate(syncProvider);
  126. }
  127. }
  128. void resetToInit() {
  129. state = const AuthState(isInitialized: false);
  130. }
  131. }
  132. final authProvider = NotifierProvider<AuthNotifier, AuthState>(
  133. AuthNotifier.new,
  134. );