refactoring
This commit is contained in:
@@ -1,6 +1,13 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:afterwork/data/datasources/event_remote_data_source.dart';
|
||||
|
||||
/// Widget pour afficher une carte d'événement.
|
||||
class EventCard extends StatelessWidget {
|
||||
final String eventId;
|
||||
final EventRemoteDataSource eventRemoteDataSource;
|
||||
final String userId;
|
||||
final String userName;
|
||||
final String userLastName;
|
||||
final String profileImage;
|
||||
final String name;
|
||||
final String datePosted;
|
||||
@@ -19,6 +26,11 @@ class EventCard extends StatelessWidget {
|
||||
|
||||
const EventCard({
|
||||
Key? key,
|
||||
required this.eventId,
|
||||
required this.eventRemoteDataSource,
|
||||
required this.userId,
|
||||
required this.userName,
|
||||
required this.userLastName,
|
||||
required this.profileImage,
|
||||
required this.name,
|
||||
required this.datePosted,
|
||||
@@ -33,7 +45,7 @@ class EventCard extends StatelessWidget {
|
||||
required this.onShare,
|
||||
required this.onParticipate,
|
||||
required this.onCloseEvent,
|
||||
required this.onMoreOptions, required String assetImage,
|
||||
required this.onMoreOptions,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
@@ -65,6 +77,7 @@ class EventCard extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
|
||||
/// Construire l'en-tête de la carte avec les informations de l'utilisateur.
|
||||
Widget _buildHeader() {
|
||||
return Row(
|
||||
children: [
|
||||
@@ -94,16 +107,17 @@ class EventCard extends StatelessWidget {
|
||||
),
|
||||
IconButton(
|
||||
icon: const Icon(Icons.more_vert, color: Colors.white),
|
||||
onPressed: onMoreOptions,
|
||||
onPressed: _onMoreOptions,
|
||||
),
|
||||
IconButton(
|
||||
icon: const Icon(Icons.close, color: Colors.white),
|
||||
onPressed: onCloseEvent,
|
||||
onPressed: _onCloseEvent,
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
/// Afficher les détails de l'événement.
|
||||
Widget _buildEventDetails() {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
@@ -125,6 +139,7 @@ class EventCard extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
|
||||
/// Afficher l'image de l'événement.
|
||||
Widget _buildEventImage() {
|
||||
return ClipRRect(
|
||||
borderRadius: BorderRadius.circular(10.0),
|
||||
@@ -134,6 +149,7 @@ class EventCard extends StatelessWidget {
|
||||
width: double.infinity,
|
||||
fit: BoxFit.cover,
|
||||
errorBuilder: (context, error, stackTrace) {
|
||||
print('Erreur de chargement de l\'image: $error');
|
||||
return Image.asset(
|
||||
'lib/assets/images/placeholder.png',
|
||||
height: 180,
|
||||
@@ -145,6 +161,7 @@ class EventCard extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
|
||||
/// Afficher les icônes d'interaction (réagir, commenter, partager).
|
||||
Widget _buildInteractionRow() {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 8.0),
|
||||
@@ -174,6 +191,7 @@ class EventCard extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
|
||||
/// Bouton d'interaction personnalisé.
|
||||
Widget _buildIconButton({
|
||||
required IconData icon,
|
||||
required String label,
|
||||
@@ -192,9 +210,10 @@ class EventCard extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
|
||||
/// Bouton pour participer à l'événement.
|
||||
Widget _buildParticipateButton() {
|
||||
return ElevatedButton(
|
||||
onPressed: onParticipate,
|
||||
onPressed: _onParticipate,
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: const Color(0xFF1DBF73),
|
||||
shape: RoundedRectangleBorder(
|
||||
@@ -206,4 +225,54 @@ class EventCard extends StatelessWidget {
|
||||
child: const Text('Participer', style: TextStyle(color: Colors.white)),
|
||||
);
|
||||
}
|
||||
|
||||
// Logique pour réagir à l'événement.
|
||||
void _onReact() async {
|
||||
try {
|
||||
print('Tentative de réaction à l\'événement $eventId par l\'utilisateur $userId');
|
||||
await eventRemoteDataSource.reactToEvent(eventId, userId);
|
||||
print('Réaction à l\'événement réussie');
|
||||
// Mettre à jour l'interface utilisateur, par exemple augmenter le compteur de réactions.
|
||||
} catch (e) {
|
||||
// Gérer l'erreur.
|
||||
print('Erreur lors de la réaction à l\'événement: $e');
|
||||
}
|
||||
}
|
||||
|
||||
// Logique pour commenter l'événement.
|
||||
void _onComment() {
|
||||
// Implémenter la logique pour commenter un événement.
|
||||
print('Commentaire sur l\'événement $eventId par l\'utilisateur $userId');
|
||||
}
|
||||
|
||||
// Logique pour partager l'événement.
|
||||
void _onShare() {
|
||||
// Implémenter la logique pour partager un événement.
|
||||
print('Partage de l\'événement $eventId par l\'utilisateur $userId');
|
||||
}
|
||||
|
||||
// Logique pour participer à l'événement.
|
||||
void _onParticipate() async {
|
||||
try {
|
||||
print('Tentative de participation à l\'événement $eventId par l\'utilisateur $userId');
|
||||
await eventRemoteDataSource.participateInEvent(eventId, userId);
|
||||
print('Participation à l\'événement réussie');
|
||||
// Mettre à jour l'interface utilisateur, par exemple afficher un message de succès.
|
||||
} catch (e) {
|
||||
// Gérer l'erreur.
|
||||
print('Erreur lors de la participation à l\'événement: $e');
|
||||
}
|
||||
}
|
||||
|
||||
// Logique pour fermer l'événement.
|
||||
void _onCloseEvent() {
|
||||
// Implémenter la logique pour fermer un événement.
|
||||
print('Fermeture de l\'événement $eventId');
|
||||
}
|
||||
|
||||
// Logique pour afficher plus d'options.
|
||||
void _onMoreOptions() {
|
||||
// Implémenter la logique pour afficher plus d'options.
|
||||
print('Affichage des options supplémentaires pour l\'événement $eventId');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,71 +1,129 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import '../dialogs/add_event_dialog.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 StatelessWidget {
|
||||
const EventScreen({super.key});
|
||||
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
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('Événements'),
|
||||
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: () {
|
||||
_showAddEventDialog(context);
|
||||
onPressed: () async {
|
||||
final eventData = await showDialog<Map<String, dynamic>>(
|
||||
context: context,
|
||||
builder: (BuildContext context) {
|
||||
return AddEventDialog(
|
||||
userId: userId,
|
||||
userName: userName,
|
||||
userLastName: 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 $userId');
|
||||
await eventRemoteDataSource.createEvent(eventData as EventModel);
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('Événement ajouté avec succès !')),
|
||||
);
|
||||
} catch (e) {
|
||||
print('Erreur lors de la création de l\'événement: $e');
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text('Erreur : $e')),
|
||||
);
|
||||
}
|
||||
}
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
body: ListView.builder(
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
itemCount: 10,
|
||||
itemBuilder: (context, index) {
|
||||
return EventCard(
|
||||
profileImage: 'lib/assets/images/profile_picture.png',
|
||||
name: 'Nom Prénom',
|
||||
datePosted: 'Posté le 24/08/2024',
|
||||
eventTitle: 'Titre de l\'événement',
|
||||
eventDescription: 'Description détaillée de l\'événement...',
|
||||
eventImageUrl: 'lib/assets/images/profile_picture.png',
|
||||
reactionsCount: 120,
|
||||
commentsCount: 45,
|
||||
sharesCount: 30,
|
||||
onReact: () {
|
||||
// Logique pour réagir à l'événement
|
||||
body: FutureBuilder<List<EventModel>>(
|
||||
future: eventRemoteDataSource.getAllEvents(),
|
||||
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(
|
||||
eventRemoteDataSource: eventRemoteDataSource,
|
||||
userId: userId,
|
||||
eventId: event.id,
|
||||
userName: userName,
|
||||
userLastName: userLastName,
|
||||
profileImage: 'lib/assets/images/profile_picture.png',
|
||||
name: '$userName $userLastName',
|
||||
datePosted: 'Posté le 24/08/2024',
|
||||
eventTitle: event.title,
|
||||
eventDescription: event.description,
|
||||
eventImageUrl: event.imageUrl ?? 'lib/assets/images/placeholder.png',
|
||||
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: () {
|
||||
print('Fermeture de l\'événement ${event.id}');
|
||||
},
|
||||
onMoreOptions: () {
|
||||
print('Affichage des options pour l\'événement ${event.id}');
|
||||
},
|
||||
);
|
||||
},
|
||||
onComment: () {
|
||||
// Logique pour commenter l'événement
|
||||
},
|
||||
onShare: () {
|
||||
// Logique pour partager l'événement
|
||||
},
|
||||
onParticipate: () {
|
||||
// Logique pour participer à l'événement
|
||||
},
|
||||
onCloseEvent: () {
|
||||
// Logique pour fermer l'événement
|
||||
},
|
||||
onMoreOptions: () {
|
||||
// Logique pour afficher plus d'options
|
||||
},
|
||||
assetImage: 'lib/assets/images/placeholder.png', // Ajoutez ce paramètre requis
|
||||
);
|
||||
},
|
||||
),
|
||||
backgroundColor: const Color(0xFF1E1E2C),
|
||||
);
|
||||
}
|
||||
|
||||
void _showAddEventDialog(BuildContext context) {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (BuildContext context) {
|
||||
return const AddEventDialog();
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user