174 lines
6.5 KiB
Dart
174 lines
6.5 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:afterwork/data/models/event_model.dart';
|
|
import 'package:afterwork/data/datasources/event_remote_data_source.dart';
|
|
import 'event_card.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
|
|
|
|
const EventScreen({
|
|
Key? key,
|
|
required this.eventRemoteDataSource,
|
|
required this.userId,
|
|
required this.userName,
|
|
required this.userLastName,
|
|
}) : super(key: key);
|
|
|
|
@override
|
|
_EventScreenState createState() => _EventScreenState();
|
|
}
|
|
|
|
class _EventScreenState extends State<EventScreen> {
|
|
late Future<List<EventModel>> _eventsFuture;
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
_eventsFuture = widget.eventRemoteDataSource.getAllEvents();
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
appBar: AppBar(
|
|
title: const Text(
|
|
'Événements',
|
|
style: TextStyle(
|
|
color: Color(0xFF1DBF73), // Définit la couleur verte du texte
|
|
),
|
|
),
|
|
backgroundColor: const Color(0xFF1E1E2C),
|
|
actions: [
|
|
IconButton(
|
|
icon: const Icon(Icons.add_circle_outline, size: 28, color: Color(0xFF1DBF73)),
|
|
onPressed: () async {
|
|
final eventData = await showDialog<Map<String, dynamic>>(
|
|
context: context,
|
|
builder: (BuildContext context) {
|
|
return AddEventDialog(
|
|
userId: widget.userId,
|
|
userName: widget.userName,
|
|
userLastName: widget.userLastName,
|
|
);
|
|
},
|
|
);
|
|
|
|
if (eventData != null) {
|
|
// Appeler l'API pour créer un nouvel événement.
|
|
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')),
|
|
);
|
|
}
|
|
}
|
|
},
|
|
),
|
|
],
|
|
),
|
|
body: FutureBuilder<List<EventModel>>(
|
|
future: _eventsFuture,
|
|
builder: (context, snapshot) {
|
|
if (snapshot.connectionState == ConnectionState.waiting) {
|
|
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é.'));
|
|
}
|
|
|
|
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), // Pour une gestion correcte du Key dans l'animation
|
|
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}',
|
|
datePosted: 'Posté le 24/08/2024',
|
|
eventTitle: event.title,
|
|
eventDescription: event.description,
|
|
eventImageUrl: event.imageUrl ?? 'lib/assets/images/placeholder.png',
|
|
eventStatus: event.status, // Ajouter le statut de l'événement ici
|
|
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}');
|
|
},
|
|
);
|
|
},
|
|
);
|
|
},
|
|
),
|
|
backgroundColor: const Color(0xFF1E1E2C),
|
|
);
|
|
}
|
|
|
|
/// 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');
|
|
await widget.eventRemoteDataSource.closeEvent(eventId);
|
|
print('Événement fermé avec succès');
|
|
|
|
// Montrer un message de succès
|
|
ScaffoldMessenger.of(context).showSnackBar(
|
|
const SnackBar(content: Text('L\'événement a été fermé avec succès.')),
|
|
);
|
|
|
|
// Actualiser la liste des événements après fermeture avec un effet de fondu
|
|
setState(() {
|
|
_eventsFuture.then((events) {
|
|
events.removeAt(index);
|
|
});
|
|
});
|
|
} 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')),
|
|
);
|
|
}
|
|
}
|
|
}
|