Base solide de la page calendar, commit avant refacto
This commit is contained in:
105
em2rp/lib/providers/event_provider.dart
Normal file
105
em2rp/lib/providers/event_provider.dart
Normal file
@ -0,0 +1,105 @@
|
||||
import 'package:cloud_firestore/cloud_firestore.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import '../models/event_model.dart';
|
||||
|
||||
class EventProvider with ChangeNotifier {
|
||||
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
|
||||
List<EventModel> _events = [];
|
||||
bool _isLoading = false;
|
||||
|
||||
List<EventModel> get events => _events;
|
||||
bool get isLoading => _isLoading;
|
||||
|
||||
// Récupérer les événements pour un utilisateur spécifique
|
||||
Future<void> loadUserEvents(String userId) async {
|
||||
_isLoading = true;
|
||||
notifyListeners();
|
||||
|
||||
try {
|
||||
print('Loading events for user: $userId');
|
||||
|
||||
// Récupérer uniquement les événements où l'utilisateur est dans la workforce
|
||||
final eventsSnapshot = await _firestore
|
||||
.collection('events')
|
||||
.where('workforce', arrayContains: userId)
|
||||
.get();
|
||||
|
||||
print('Found ${eventsSnapshot.docs.length} events for user');
|
||||
|
||||
_events = eventsSnapshot.docs.map((doc) {
|
||||
print('Event data: ${doc.data()}');
|
||||
return EventModel.fromMap(doc.data(), doc.id);
|
||||
}).toList();
|
||||
|
||||
print('Parsed ${_events.length} events');
|
||||
|
||||
_isLoading = false;
|
||||
notifyListeners();
|
||||
} catch (e) {
|
||||
print('Error loading events: $e');
|
||||
_isLoading = false;
|
||||
notifyListeners();
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
// Récupérer un événement spécifique
|
||||
Future<EventModel?> getEvent(String eventId) async {
|
||||
try {
|
||||
final doc = await _firestore.collection('events').doc(eventId).get();
|
||||
if (doc.exists) {
|
||||
return EventModel.fromMap(doc.data()!, doc.id);
|
||||
}
|
||||
return null;
|
||||
} catch (e) {
|
||||
print('Error getting event: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
// Ajouter un nouvel événement
|
||||
Future<void> addEvent(EventModel event) async {
|
||||
try {
|
||||
final docRef = await _firestore.collection('events').add(event.toMap());
|
||||
final newEvent = EventModel.fromMap(event.toMap(), docRef.id);
|
||||
_events.add(newEvent);
|
||||
notifyListeners();
|
||||
} catch (e) {
|
||||
print('Error adding event: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
// Mettre à jour un événement
|
||||
Future<void> updateEvent(EventModel event) async {
|
||||
try {
|
||||
await _firestore.collection('events').doc(event.id).update(event.toMap());
|
||||
final index = _events.indexWhere((e) => e.id == event.id);
|
||||
if (index != -1) {
|
||||
_events[index] = event;
|
||||
notifyListeners();
|
||||
}
|
||||
} catch (e) {
|
||||
print('Error updating event: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
// Supprimer un événement
|
||||
Future<void> deleteEvent(String eventId) async {
|
||||
try {
|
||||
await _firestore.collection('events').doc(eventId).delete();
|
||||
_events.removeWhere((event) => event.id == eventId);
|
||||
notifyListeners();
|
||||
} catch (e) {
|
||||
print('Error deleting event: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
// Vider la liste des événements
|
||||
void clearEvents() {
|
||||
_events = [];
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user