login_view_model.dart 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import 'package:flutter/material.dart';
  2. import '../data/session/session_storage.dart'; // Asegúrate de importar SessionStorage
  3. import '../models/models.dart';
  4. import '../services/login_service.dart';
  5. import '../services/services.dart';
  6. enum Status { uninitialized, authenticated, authenticating, unauthenticated }
  7. class LoginViewModel extends ChangeNotifier {
  8. Status _status = Status.uninitialized;
  9. Status get status => _status;
  10. bool hasErrors = false;
  11. Map<String, dynamic>? _errores = {};
  12. bool _obscureText = true;
  13. Usuario? _usuario;
  14. int? _idUsuario;
  15. bool _isLoading = true; // Indica si está verificando la sesión
  16. bool get isLoading => _isLoading; // Getter para el estado de carga
  17. // Getters
  18. Usuario? get usuario => _usuario;
  19. Map<String, dynamic>? get errores => _errores;
  20. Future<void> login(String correo) async {
  21. try {
  22. print("Iniciando proceso de login para: $correo");
  23. List<Usuario> usuarios = await RepoService<Usuario>().obtenerTodos();
  24. print("Usuarios obtenidos de la base de datos: ${usuarios.length}");
  25. Usuario? usuario = usuarios.firstWhere(
  26. (usuario) => usuario.correo?.toLowerCase() == correo.toLowerCase(),
  27. orElse: () => Usuario(),
  28. );
  29. // Si el correo es válido
  30. if (usuario.id != 0) {
  31. print("Usuario encontrado: ${usuario.correo}, ID: ${usuario.id}");
  32. _status = Status.authenticated;
  33. _errores = null;
  34. _idUsuario = usuario.id;
  35. // Guardar el id del usuario en SessionStorage
  36. await SessionStorage().saveId(_idUsuario!);
  37. print("ID guardado en SharedPreferences: $_idUsuario");
  38. notifyListeners();
  39. } else {
  40. print("Correo no válido: $correo");
  41. hasErrors = true;
  42. _errores = {'correo': 'El correo no existe en el sistema'};
  43. _status = Status.unauthenticated;
  44. notifyListeners();
  45. }
  46. } catch (e) {
  47. print("Error durante el proceso de login: $e");
  48. _status = Status.unauthenticated;
  49. notifyListeners();
  50. }
  51. }
  52. Future<void> checkSession() async {
  53. _isLoading = true; // Inicia el estado de carga
  54. notifyListeners();
  55. int? idUsuarioGuardado = await SessionStorage().getId();
  56. if (idUsuarioGuardado != null) {
  57. print("Sesión encontrada para el ID de usuario: $idUsuarioGuardado");
  58. _idUsuario = idUsuarioGuardado;
  59. _status = Status.authenticated;
  60. } else {
  61. print("No se encontró ninguna sesión activa.");
  62. _status = Status.unauthenticated;
  63. }
  64. _isLoading = false; // Termina el estado de carga
  65. notifyListeners();
  66. }
  67. void logOut() async {
  68. print("Cerrando sesión...");
  69. _usuario = null;
  70. _idUsuario = null;
  71. _status = Status.unauthenticated;
  72. _errores = {};
  73. await SessionStorage().clearId();
  74. print("ID de usuario eliminado de SharedPreferences.");
  75. notifyListeners();
  76. }
  77. void showPassword() {
  78. _obscureText = !_obscureText;
  79. notifyListeners();
  80. }
  81. }