import 'package:flutter/material.dart'; import 'package:firebase_auth/firebase_auth.dart' as firebase_auth; import 'package:cloud_firestore/cloud_firestore.dart'; import '../models/user.dart'; import '../services/auth_service.dart'; class UserProvider extends ChangeNotifier { User? _currentUser; final AuthService _authService = AuthService(); final FirebaseFirestore _firestore = FirebaseFirestore.instance; User? get currentUser => _currentUser; void setCurrentUser(User user) { _currentUser = user; notifyListeners(); } Future logout() async { await _authService.signOut(); _currentUser = null; notifyListeners(); } bool get isLoggedIn => _currentUser != null; // Méthode pour récupérer les données utilisateur depuis Firestore Future getUserData(String uid) async { try { DocumentSnapshot doc = await _firestore.collection('users').doc(uid).get(); if (doc.exists) { Map data = doc.data() as Map; return User.fromMap({...data, 'id': uid}); } return null; } catch (e) { print('Erreur lors de la récupération des données utilisateur: $e'); return null; } } // Méthode pour sauvegarder les données utilisateur dans Firestore Future saveUserData(User user) async { try { await _firestore.collection('users').doc(user.id).set(user.toMap()); } catch (e) { print('Erreur lors de la sauvegarde des données utilisateur: $e'); throw e; } } // Méthode pour mettre à jour les données utilisateur Future updateUser(User updatedUser) async { try { await _firestore.collection('users').doc(updatedUser.id).update(updatedUser.toMap()); // Mettre à jour le displayName dans Firebase Auth await _authService.updateDisplayName(displayName: updatedUser.fullName); _currentUser = updatedUser; notifyListeners(); return true; } catch (e) { print('Erreur lors de la mise à jour de l\'utilisateur: $e'); return false; } } // Initialiser l'utilisateur connecté Future initializeUser() async { firebase_auth.User? firebaseUser = _authService.currentUser; if (firebaseUser != null) { User? userData = await getUserData(firebaseUser.uid); if (userData != null) { _currentUser = userData; notifyListeners(); } } } }