1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- import 'package:flutter/material.dart';
- import '../data/session/session_storage.dart';
- import '../models/models.dart';
- import '../services/login_service.dart';
- import '../services/services.dart';
- import 'package:bcrypt/bcrypt.dart';
- enum Status { uninitialized, authenticated, authenticating, unauthenticated }
- class LoginViewModel extends ChangeNotifier {
- Status _status = Status.uninitialized;
- Status get status => _status;
- bool hasErrors = false;
- Map<String, dynamic>? _errores = {};
- bool _obscureText = true;
- Usuario? _usuario;
- int? _idUsuario;
- bool _isLoading = true;
- bool get isLoading => _isLoading;
- bool get obscureText => _obscureText;
- // Getters
- Usuario? get usuario => _usuario;
- Map<String, dynamic>? get errores => _errores;
- Future<void> login(String correo, String contrasena) async {
- try {
- print("Iniciando proceso de login para: $correo");
- List<Usuario> usuarios = await RepoService<Usuario>().obtenerTodos();
- Usuario? usuario = usuarios.firstWhere(
- (usuario) => usuario.correo?.toLowerCase() == correo.toLowerCase(),
- orElse: () => Usuario(),
- );
- if (usuario.id != 0 && usuario.clave != null) {
- bool esContrasenaValida = BCrypt.checkpw(contrasena, usuario.clave!);
- if (esContrasenaValida) {
- _status = Status.authenticated;
- _errores = null;
- _idUsuario = usuario.id;
- await SessionStorage().saveId(_idUsuario!);
- notifyListeners();
- } else {
- _errores = {'contrasena': 'Contraseña incorrecta'};
- _status = Status.unauthenticated;
- notifyListeners();
- }
- } else {
- _errores = {'correo': 'El correo no existe en el sistema'};
- _status = Status.unauthenticated;
- notifyListeners();
- }
- } catch (e) {
- print("Error durante el proceso de login: $e");
- _status = Status.unauthenticated;
- notifyListeners();
- }
- }
- Future<void> checkSession() async {
- _isLoading = true; // Inicia el estado de carga
- notifyListeners();
- int? idUsuarioGuardado = await SessionStorage().getId();
- if (idUsuarioGuardado != null) {
- print("Sesión encontrada para el ID de usuario: $idUsuarioGuardado");
- _idUsuario = idUsuarioGuardado;
- _status = Status.authenticated;
- } else {
- print("No se encontró ninguna sesión activa.");
- _status = Status.unauthenticated;
- }
- _isLoading = false;
- notifyListeners();
- }
- void logOut() async {
- print("Cerrando sesión...");
- _usuario = null;
- _idUsuario = null;
- _status = Status.unauthenticated;
- _errores = {};
- await SessionStorage().clearId();
- print("ID de usuario eliminado de SharedPreferences.");
- notifyListeners();
- }
- void showPassword() {
- _obscureText = !_obscureText;
- notifyListeners();
- }
- }
|