feat: Integrate Firebase Authentication and Firestore
- Added Firebase configuration to Android and iOS projects. - Created `google-services.json` and `GoogleService-Info.plist` for Firebase setup. - Implemented `AuthService` for handling user authentication with Firebase. - Updated `UserProvider` to manage user data with Firestore. - Refactored `ProfileContent`, `LoginPage`, and `SignUpPage` to use the new authentication service. - Removed the old `UserService` and replaced it with Firestore-based user management. - Added Firebase options in `firebase_options.dart` for platform-specific configurations. - Updated dependencies in `pubspec.yaml` for Firebase packages.
This commit is contained in:
@@ -1,8 +1,13 @@
|
||||
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;
|
||||
|
||||
@@ -11,10 +16,65 @@ class UserProvider extends ChangeNotifier {
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void logout() {
|
||||
Future<void> 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<User?> getUserData(String uid) async {
|
||||
try {
|
||||
DocumentSnapshot doc = await _firestore.collection('users').doc(uid).get();
|
||||
if (doc.exists) {
|
||||
Map<String, dynamic> data = doc.data() as Map<String, dynamic>;
|
||||
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<void> 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<bool> 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<void> initializeUser() async {
|
||||
firebase_auth.User? firebaseUser = _authService.currentUser;
|
||||
if (firebaseUser != null) {
|
||||
User? userData = await getUserData(firebaseUser.uid);
|
||||
if (userData != null) {
|
||||
_currentUser = userData;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user