Refactoring

This commit is contained in:
DahoudG
2024-09-02 21:16:31 +00:00
parent ef72a81b64
commit 04f240b521
5 changed files with 145 additions and 42 deletions

View File

@@ -4,7 +4,7 @@ import 'package:afterwork/data/datasources/event_remote_data_source.dart';
/// Widget pour afficher une carte d'événement.
/// Cette classe est utilisée pour afficher les détails d'un événement,
/// incluant son titre, sa description, son image, et des actions possibles
/// telles que réagir, commenter, partager, participer, et fermer l'événement.
/// telles que réagir, commenter, partager, participer, et fermer ou rouvrir l'événement.
class EventCard extends StatelessWidget {
// Identifiant unique de l'événement
final String eventId;
@@ -50,6 +50,8 @@ class EventCard extends StatelessWidget {
final VoidCallback onMoreOptions;
// Callback pour fermer l'événement
final VoidCallback onCloseEvent;
// Callback pour rouvrir l'événement
final VoidCallback onReopenEvent;
const EventCard({
Key? key,
@@ -75,6 +77,7 @@ class EventCard extends StatelessWidget {
required this.onParticipate,
required this.onMoreOptions,
required this.onCloseEvent,
required this.onReopenEvent,
}) : super(key: key);
@override
@@ -87,11 +90,19 @@ class EventCard extends StatelessWidget {
duration: const Duration(milliseconds: 300),
child: Dismissible(
key: ValueKey(eventId),
direction: DismissDirection.startToEnd,
direction: eventStatus == 'CLOSED'
? DismissDirection.endToStart // Permet de rouvrir avec un swipe à gauche
: DismissDirection.startToEnd, // Permet de fermer avec un swipe à droite
onDismissed: (direction) {
// Log du déclenchement de la fermeture de l'événement
print('Tentative de fermeture de l\'événement $eventId');
onCloseEvent();
if (direction == DismissDirection.startToEnd) {
// Log du déclenchement de la fermeture de l'événement
print('Tentative de fermeture de l\'événement $eventId');
onCloseEvent();
} else if (direction == DismissDirection.endToStart && eventStatus == 'CLOSED') {
// Log du déclenchement de la réouverture de l'événement
print('Tentative de réouverture de l\'événement $eventId');
onReopenEvent();
}
},
background: Container(
color: Colors.red,
@@ -99,6 +110,12 @@ class EventCard extends StatelessWidget {
padding: const EdgeInsets.only(left: 20.0),
child: const Icon(Icons.delete, color: Colors.white),
),
secondaryBackground: Container(
color: Colors.green,
alignment: Alignment.centerRight,
padding: const EdgeInsets.only(right: 20.0),
child: const Icon(Icons.replay, color: Colors.white),
),
child: Stack(
children: [
Card(
@@ -114,7 +131,7 @@ class EventCard extends StatelessWidget {
children: [
_buildHeader(context),
const SizedBox(height: 10),
_buildEventCategory(), // Affichage de la catégorie de l'événement
_buildEventCategory(),
const SizedBox(height: 5),
_buildEventDetails(),
const SizedBox(height: 10),
@@ -271,11 +288,11 @@ class EventCard extends StatelessWidget {
print('Affichage des interactions pour l\'événement $eventId');
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 0.0), // Réduire le padding vertical
padding: const EdgeInsets.symmetric(vertical: 4.0), // Réduire le padding vertical
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround, // Utiliser spaceAround pour réduire l'espace
children: [
Flexible(
Expanded(
child: _buildIconButton(
icon: Icons.thumb_up_alt_outlined,
label: 'Réagir',
@@ -287,7 +304,7 @@ class EventCard extends StatelessWidget {
},
),
),
Flexible(
Expanded(
child: _buildIconButton(
icon: Icons.comment_outlined,
label: 'Commenter',
@@ -299,7 +316,7 @@ class EventCard extends StatelessWidget {
},
),
),
Flexible(
Expanded(
child: _buildIconButton(
icon: Icons.share_outlined,
label: 'Partager',
@@ -327,28 +344,33 @@ class EventCard extends StatelessWidget {
// Log de la construction du bouton d'interaction
print('Construction du bouton $label pour l\'événement $eventId');
return Expanded(
child: TextButton.icon(
onPressed: onPressed,
icon: Icon(icon, color: const Color(0xFF1DBF73), size: 20),
label: Text(
'$label ($count)',
style: const TextStyle(color: Colors.white70, fontSize: 12),
overflow: TextOverflow.ellipsis,
),
return TextButton.icon(
onPressed: onPressed,
icon: Icon(icon, color: const Color(0xFF1DBF73), size: 20),
label: Text(
'$label ($count)',
style: const TextStyle(color: Colors.white70, fontSize: 12),
overflow: TextOverflow.ellipsis,
),
);
}
/// Bouton pour participer à l'événement.
/// Cette méthode construit un bouton qui permet de participer à l'événement.
/// Si l'événement est fermé, le bouton est désactivé.
/// Si l'événement est fermé, le bouton est caché.
Widget _buildParticipateButton() {
// Log de la construction du bouton "Participer"
print('Construction du bouton "Participer" pour l\'événement $eventId avec statut $eventStatus');
// Si l'événement est fermé, ne rien retourner (pas de bouton)
if (eventStatus == 'CLOSED') {
print('L\'événement $eventId est fermé, le bouton "Participer" est caché.');
return SizedBox.shrink(); // Retourne un widget vide pour ne pas occuper d'espace
}
// Sinon, retourner le bouton "Participer"
return ElevatedButton(
onPressed: eventStatus == 'CLOSED' ? null : onParticipate, // Désactiver si l'événement est fermé
onPressed: onParticipate,
style: ElevatedButton.styleFrom(
backgroundColor: const Color(0xFF1DBF73),
shape: RoundedRectangleBorder(
@@ -357,9 +379,9 @@ class EventCard extends StatelessWidget {
padding: const EdgeInsets.symmetric(vertical: 12.0),
minimumSize: const Size(double.infinity, 40),
),
child: Text(
eventStatus == 'CLOSED' ? 'Événement fermé' : 'Participer',
style: const TextStyle(color: Colors.white),
child: const Text(
'Participer',
style: TextStyle(color: Colors.white),
),
);
}