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 { // --- Étape 1: Connecter l'utilisateur dans Firebase Auth --- // Appelle la méthode du provider qui gère la connexion Auth ET le chargement des données utilisateur await localAuthProvider.signInWithEmailAndPassword( emailController.text, passwordController.text, ); // Vérifier si le contexte est toujours valide if (context.mounted) { // Vérifier si l'utilisateur a bien été chargé dans le provider if (localAuthProvider.currentUser != null) { // Utiliser pushReplacementNamed pour une transition propre Navigator.of(context, rootNavigator: true) .pushReplacementNamed('/calendar'); } else { errorMessage = 'Erreur inattendue après connexion: Données utilisateur non chargées.'; isLoading = false; notifyListeners(); } } } on FirebaseAuthException catch (e) { // Gestion spécifique des erreurs d'authentification (email/mot de passe incorrects, etc.) isLoading = false; errorMessage = e.message ?? 'Une erreur est survenue lors de la connexion Firebase.'; notifyListeners(); } catch (e) { // Gestion des autres erreurs potentielles (ex: erreur lors de loadUserData) isLoading = false; errorMessage = 'Une erreur inattendue est survenue: ${e.toString()}'; notifyListeners(); } } @override void dispose() { emailController.dispose(); passwordController.dispose(); super.dispose(); } }