import 'package:flutter/material.dart'; import 'package:firebase_auth/firebase_auth.dart'; import '../providers/local_user_provider.dart'; import 'package:provider/provider.dart'; class LoginViewModel extends ChangeNotifier { final TextEditingController emailController = TextEditingController(); final TextEditingController passwordController = TextEditingController(); String errorMessage = ''; bool isLoading = false; bool obscurePassword = true; bool highlightPasswordField = false; bool highlightEmailField = false; void togglePasswordVisibility() { obscurePassword = !obscurePassword; notifyListeners(); } Future signIn(BuildContext context) async { final localAuthProvider = Provider.of(context, listen: false); isLoading = true; errorMessage = ''; highlightPasswordField = false; highlightEmailField = false; notifyListeners(); try { final userCredential = await localAuthProvider.signInWithEmailAndPassword( emailController.text.trim(), passwordController.text); print('User signed in'); // Attendre que les données utilisateur soient chargées await localAuthProvider.loadUserData(); // Vérifier si le contexte est toujours valide if (context.mounted) { // Vérifier si l'utilisateur a bien été chargé if (localAuthProvider.currentUser != null) { // Utiliser pushReplacementNamed pour une transition propre Navigator.of(context, rootNavigator: true) .pushReplacementNamed('/calendar'); } else { errorMessage = 'Erreur lors du chargement des données utilisateur'; isLoading = false; notifyListeners(); } } } on FirebaseAuthException catch (e) { isLoading = false; errorMessage = e.message ?? 'Une erreur est survenue lors de la connexion'; notifyListeners(); } catch (e) { isLoading = false; errorMessage = 'Une erreur inattendue est survenue'; notifyListeners(); } } @override void dispose() { emailController.dispose(); passwordController.dispose(); super.dispose(); } }