login_view_model.dart 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import 'package:flutter/material.dart';
  2. import '../models/models.dart';
  3. import '../services/login_service.dart';
  4. import '../services/services.dart';
  5. enum Status { uninitialized, authenticated, authenticating, unauthenticated }
  6. class LoginViewModel extends ChangeNotifier {
  7. Status _status = Status.uninitialized;
  8. Status get status => _status;
  9. bool hasErrors = false;
  10. Map<String, dynamic>? _errores = {};
  11. bool _obscureText = true;
  12. Usuario? _usuario;
  13. int? _idUsuario;
  14. // Getters
  15. Usuario? get usuario => _usuario;
  16. Map<String, dynamic>? get errores => _errores;
  17. Future<void> login(String correo) async {
  18. try {
  19. print("Iniciando proceso de login para: $correo");
  20. List<Usuario> usuarios = await RepoService<Usuario>().obtenerTodos();
  21. print("Usuarios obtenidos de la base de datos: ${usuarios.length}");
  22. Usuario? usuario = usuarios.firstWhere(
  23. (usuario) => usuario.correo?.toLowerCase() == correo.toLowerCase(),
  24. orElse: () => Usuario(),
  25. );
  26. // Si el correo es válido
  27. if (usuario.id != 0) {
  28. print("Usuario encontrado: ${usuario.correo}, ID: ${usuario.id}");
  29. _status = Status.authenticated;
  30. _errores = null;
  31. _idUsuario = usuario.id;
  32. notifyListeners();
  33. } else {
  34. print("Correo no válido: $correo");
  35. hasErrors = true;
  36. _errores = {'correo': 'El correo no existe en el sistema'};
  37. _status = Status.unauthenticated;
  38. notifyListeners();
  39. }
  40. } catch (e) {
  41. print("Error durante el proceso de login: $e");
  42. _status = Status.unauthenticated;
  43. notifyListeners();
  44. }
  45. }
  46. void showPassword() {
  47. _obscureText = !_obscureText;
  48. notifyListeners();
  49. }
  50. void logOut() {
  51. print("Cerrando sesión...");
  52. _usuario = null;
  53. _idUsuario = null;
  54. _status = Status.unauthenticated;
  55. _errores = {};
  56. notifyListeners();
  57. }
  58. }