refactoring and checkpoint
This commit is contained in:
@@ -1,19 +1,17 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:afterwork/data/models/event_model.dart';
|
||||
import 'package:afterwork/data/datasources/event_remote_data_source.dart';
|
||||
import 'event_card.dart';
|
||||
import 'package:afterwork/presentation/screens/event/event_card.dart';
|
||||
import '../../state_management/event_bloc.dart';
|
||||
import '../dialogs/add_event_dialog.dart';
|
||||
|
||||
/// Écran principal pour afficher les événements.
|
||||
class EventScreen extends StatefulWidget {
|
||||
final EventRemoteDataSource eventRemoteDataSource;
|
||||
final String userId;
|
||||
final String userName; // Nom de l'utilisateur
|
||||
final String userLastName; // Prénom de l'utilisateur
|
||||
final String userName;
|
||||
final String userLastName;
|
||||
|
||||
const EventScreen({
|
||||
Key? key,
|
||||
required this.eventRemoteDataSource,
|
||||
required this.userId,
|
||||
required this.userName,
|
||||
required this.userLastName,
|
||||
@@ -24,13 +22,11 @@ class EventScreen extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _EventScreenState extends State<EventScreen> {
|
||||
late Future<List<EventModel>> _eventsFuture;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
// Récupérer la liste des événements à partir de la source de données distante
|
||||
_eventsFuture = widget.eventRemoteDataSource.getAllEvents();
|
||||
// Charger les événements lors de l'initialisation
|
||||
context.read<EventBloc>().add(LoadEvents(widget.userId));
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -60,161 +56,98 @@ class _EventScreenState extends State<EventScreen> {
|
||||
);
|
||||
|
||||
if (eventData != null) {
|
||||
try {
|
||||
print('Tentative de création d\'un nouvel événement par l\'utilisateur ${widget.userId}');
|
||||
await widget.eventRemoteDataSource.createEvent(eventData as EventModel);
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('Événement ajouté avec succès !')),
|
||||
);
|
||||
// Réactualiser la liste des événements après création
|
||||
setState(() {
|
||||
_eventsFuture = widget.eventRemoteDataSource.getAllEvents();
|
||||
});
|
||||
} catch (e) {
|
||||
print('Erreur lors de la création de l\'événement: $e');
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text('Erreur : $e')),
|
||||
);
|
||||
}
|
||||
// Ajouter l'événement en appelant l'API via le bloc
|
||||
context.read<EventBloc>().add(AddEvent(EventModel.fromJson(eventData)));
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('Événement ajouté avec succès !')),
|
||||
);
|
||||
}
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
body: FutureBuilder<List<EventModel>>(
|
||||
future: _eventsFuture,
|
||||
builder: (context, snapshot) {
|
||||
if (snapshot.connectionState == ConnectionState.waiting) {
|
||||
body: BlocBuilder<EventBloc, EventState>(
|
||||
builder: (context, state) {
|
||||
if (state is EventLoading) {
|
||||
return const Center(child: CircularProgressIndicator());
|
||||
} else if (snapshot.hasError) {
|
||||
print('Erreur lors de la récupération des événements: ${snapshot.error}');
|
||||
return Center(child: Text('Erreur: ${snapshot.error}'));
|
||||
} else if (!snapshot.hasData || snapshot.data!.isEmpty) {
|
||||
return const Center(child: Text('Aucun événement trouvé.'));
|
||||
} else if (state is EventLoaded) {
|
||||
final events = state.events;
|
||||
if (events.isEmpty) {
|
||||
return const Center(child: Text('Aucun événement disponible.'));
|
||||
}
|
||||
return ListView.builder(
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
itemCount: events.length,
|
||||
itemBuilder: (context, index) {
|
||||
final event = events[index];
|
||||
return EventCard(
|
||||
key: ValueKey(event.id),
|
||||
event: event,
|
||||
userId: widget.userId,
|
||||
userName: widget.userName,
|
||||
userLastName: widget.userLastName,
|
||||
onReact: () => _onReact(event.id),
|
||||
onComment: () => _onComment(event.id),
|
||||
onShare: () => _onShare(event.id),
|
||||
onParticipate: () => _onParticipate(event.id),
|
||||
onCloseEvent: () => _onCloseEvent(event.id),
|
||||
onReopenEvent: () => _onReopenEvent(event.id),
|
||||
);
|
||||
},
|
||||
);
|
||||
} else if (state is EventError) {
|
||||
return Center(child: Text('Erreur: ${state.message}'));
|
||||
}
|
||||
|
||||
final events = snapshot.data!;
|
||||
print('Nombre d\'événements récupérés: ${events.length}');
|
||||
|
||||
return ListView.builder(
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
itemCount: events.length,
|
||||
itemBuilder: (context, index) {
|
||||
final event = events[index];
|
||||
print('Affichage de l\'événement ${event.id}');
|
||||
|
||||
return EventCard(
|
||||
key: ValueKey(event.id),
|
||||
eventRemoteDataSource: widget.eventRemoteDataSource,
|
||||
userId: widget.userId,
|
||||
eventId: event.id,
|
||||
userName: widget.userName,
|
||||
userLastName: widget.userLastName,
|
||||
profileImage: 'lib/assets/images/profile_picture.png',
|
||||
name: '${widget.userName} ${widget.userLastName}',
|
||||
eventCategory: event.category,
|
||||
datePosted: event.date,
|
||||
eventTitle: event.title,
|
||||
eventDescription: event.description,
|
||||
eventImageUrl: event.imageUrl ?? 'lib/assets/images/placeholder.png',
|
||||
eventStatus: event.status,
|
||||
reactionsCount: 120, // Exemple de valeur
|
||||
commentsCount: 45, // Exemple de valeur
|
||||
sharesCount: 30, // Exemple de valeur
|
||||
onReact: () {
|
||||
print('Réaction à l\'événement ${event.id}');
|
||||
},
|
||||
onComment: () {
|
||||
print('Commentaire sur l\'événement ${event.id}');
|
||||
},
|
||||
onShare: () {
|
||||
print('Partage de l\'événement ${event.id}');
|
||||
},
|
||||
onParticipate: () {
|
||||
print('Participation à l\'événement ${event.id}');
|
||||
},
|
||||
onCloseEvent: () => _onCloseEvent(context, event.id, index),
|
||||
onMoreOptions: () {
|
||||
print('Affichage des options pour l\'événement ${event.id}');
|
||||
},
|
||||
onReopenEvent: () => _onReopenEvent(context, event.id, index),
|
||||
);
|
||||
},
|
||||
);
|
||||
return const Center(child: Text('Aucun événement disponible.'));
|
||||
},
|
||||
),
|
||||
backgroundColor: const Color(0xFF1E1E2C),
|
||||
floatingActionButton: FloatingActionButton(
|
||||
onPressed: () {
|
||||
// Recharger les événements
|
||||
context.read<EventBloc>().add(LoadEvents(widget.userId));
|
||||
},
|
||||
backgroundColor: const Color(0xFF1DBF73),
|
||||
child: const Icon(Icons.refresh),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/// Logique pour fermer un événement
|
||||
void _onCloseEvent(BuildContext context, String eventId, int index) async {
|
||||
try {
|
||||
print('Tentative de fermeture de l\'événement $eventId');
|
||||
|
||||
// Appeler l'API pour fermer l'événement
|
||||
await widget.eventRemoteDataSource.closeEvent(eventId);
|
||||
print('Événement fermé avec succès');
|
||||
|
||||
// Montrer un message de succès AVANT de supprimer l'événement de la liste
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('L\'événement a été fermé avec succès.')),
|
||||
);
|
||||
|
||||
// Supprimez l'événement de la liste après avoir affiché le SnackBar
|
||||
setState(() {
|
||||
_eventsFuture = _eventsFuture.then((events) {
|
||||
events.removeAt(index);
|
||||
return events;
|
||||
});
|
||||
});
|
||||
} catch (e) {
|
||||
print('Erreur lors de la fermeture de l\'événement: $e');
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text('Erreur lors de la fermeture de l\'événement : $e')),
|
||||
);
|
||||
}
|
||||
void _onReact(String eventId) {
|
||||
print('Réaction à l\'événement $eventId');
|
||||
// Implémentez la logique pour réagir à un événement ici
|
||||
}
|
||||
|
||||
/// Logique pour rouvrir un événement
|
||||
void _onReopenEvent(BuildContext context, String eventId, int index) async {
|
||||
try {
|
||||
print('Tentative de réouverture de l\'événement $eventId');
|
||||
await widget.eventRemoteDataSource.reopenEvent(eventId);
|
||||
print('Événement rouvert avec succès');
|
||||
void _onComment(String eventId) {
|
||||
print('Commentaire sur l\'événement $eventId');
|
||||
// Implémentez la logique pour commenter un événement ici
|
||||
}
|
||||
|
||||
// Montrer un message de succès
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('L\'événement a été rouvert avec succès.')),
|
||||
);
|
||||
void _onShare(String eventId) {
|
||||
print('Partage de l\'événement $eventId');
|
||||
// Implémentez la logique pour partager un événement ici
|
||||
}
|
||||
|
||||
// Mettre à jour le statut de l'événement dans la liste des événements
|
||||
setState(() {
|
||||
_eventsFuture = _eventsFuture.then((events) {
|
||||
final updatedEvent = EventModel(
|
||||
id: events[index].id,
|
||||
title: events[index].title,
|
||||
description: events[index].description,
|
||||
date: events[index].date,
|
||||
location: events[index].location,
|
||||
category: events[index].category,
|
||||
link: events[index].link,
|
||||
imageUrl: events[index].imageUrl,
|
||||
creator: events[index].creator,
|
||||
participants: events[index].participants,
|
||||
status: 'OPEN', // Mettre à jour le statut à 'OPEN'
|
||||
);
|
||||
void _onParticipate(String eventId) {
|
||||
print('Participation à l\'événement $eventId');
|
||||
// Implémentez la logique pour participer à un événement ici
|
||||
}
|
||||
|
||||
// Remplacer l'événement dans la liste
|
||||
events[index] = updatedEvent;
|
||||
return events;
|
||||
});
|
||||
});
|
||||
} catch (e) {
|
||||
print('Erreur lors de la réouverture de l\'événement: $e');
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text('Erreur lors de la réouverture de l\'événement : $e')),
|
||||
);
|
||||
}
|
||||
void _onCloseEvent(String eventId) {
|
||||
print('Fermeture de l\'événement $eventId');
|
||||
// Appeler le bloc pour fermer l'événement
|
||||
context.read<EventBloc>().add(CloseEvent(eventId));
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('L\'événement a été fermé avec succès.')),
|
||||
);
|
||||
}
|
||||
|
||||
void _onReopenEvent(String eventId) {
|
||||
print('Réouverture de l\'événement $eventId');
|
||||
// Appeler le bloc pour rouvrir l'événement
|
||||
context.read<EventBloc>().add(ReopenEvent(eventId));
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('L\'événement a été rouvert avec succès.')),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user