bouton qui fonctionne

This commit is contained in:
2025-05-28 23:21:33 +02:00
parent b80a6d2623
commit 77d0d5cc81

View File

@ -106,6 +106,25 @@ class EventDetails extends StatelessWidget {
.collection('events') .collection('events')
.doc(event.id) .doc(event.id)
.update({'status': eventStatusToString(newStatus)}); .update({'status': eventStatusToString(newStatus)});
// Recharge l'événement depuis Firestore et notifie le parent
final snap = await FirebaseFirestore.instance
.collection('events')
.doc(event.id)
.get();
final updatedEvent =
EventModel.fromMap(snap.data()!, event.id);
onSelectEvent(updatedEvent,
selectedDate ?? updatedEvent.startDateTime);
// Recharge la liste des événements pour mettre à jour la vue calendrier
final localUserProvider =
Provider.of<LocalUserProvider>(context, listen: false);
final userId = localUserProvider.currentUser?.uid;
final canViewAll =
localUserProvider.hasPermission('view_all_users');
if (userId != null) {
await Provider.of<EventProvider>(context, listen: false)
.loadUserEvents(userId, canViewAllEvents: canViewAll);
}
}, },
), ),
), ),
@ -628,44 +647,43 @@ class _FirestoreStatusButton extends StatefulWidget {
final String eventId; final String eventId;
final EventStatus currentStatus; final EventStatus currentStatus;
final Future<void> Function(EventStatus) onStatusChanged; final Future<void> Function(EventStatus) onStatusChanged;
const _FirestoreStatusButton( const _FirestoreStatusButton({
{required this.eventId, required this.eventId,
required this.currentStatus, required this.currentStatus,
required this.onStatusChanged}); required this.onStatusChanged,
});
@override @override
State<_FirestoreStatusButton> createState() => _FirestoreStatusButtonState(); State<_FirestoreStatusButton> createState() => _FirestoreStatusButtonState();
} }
class _FirestoreStatusButtonState extends State<_FirestoreStatusButton> { class _FirestoreStatusButtonState extends State<_FirestoreStatusButton> {
late EventStatus _status;
bool _loading = false; bool _loading = false;
@override Future<void> changerStatut(EventStatus nouveau) async {
void initState() { if (widget.currentStatus == nouveau) return;
super.initState(); setState(() => _loading = true);
_status = widget.currentStatus; await widget.onStatusChanged(nouveau);
setState(() => _loading = false);
} }
Future<void> changerStatut(EventStatus nouveau) async { @override
if (_status == nouveau) return; void didUpdateWidget(covariant _FirestoreStatusButton oldWidget) {
setState(() => _loading = true); super.didUpdateWidget(oldWidget);
await FirebaseFirestore.instance // Si l'événement change, on arrête le loading (sécurité UX)
.collection('events') if (oldWidget.eventId != widget.eventId ||
.doc(widget.eventId) oldWidget.currentStatus != widget.currentStatus) {
.update({'status': eventStatusToString(nouveau)}); if (_loading) setState(() => _loading = false);
setState(() { }
_status = nouveau;
_loading = false;
});
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final status = widget.currentStatus;
String texte; String texte;
Color couleurFond; Color couleurFond;
List<Widget> enfants = []; List<Widget> enfants = [];
switch (_status) { switch (status) {
case EventStatus.waitingForApproval: case EventStatus.waitingForApproval:
texte = "En Attente"; texte = "En Attente";
couleurFond = Colors.yellow.shade600; couleurFond = Colors.yellow.shade600;