refactoring
This commit is contained in:
@@ -81,14 +81,16 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
|
||||
totalPages: result.totalPages,
|
||||
));
|
||||
} on DioException catch (e) {
|
||||
if (e.type == DioExceptionType.cancel) return;
|
||||
emit(EvenementsNetworkError(
|
||||
message: _getNetworkErrorMessage(e),
|
||||
code: e.response?.statusCode.toString(),
|
||||
error: e,
|
||||
));
|
||||
} catch (e) {
|
||||
if (e is DioException && e.type == DioExceptionType.cancel) return;
|
||||
emit(EvenementsError(
|
||||
message: 'Erreur inattendue lors du chargement des événements: $e',
|
||||
message: 'Erreur lors du chargement des événements. Veuillez réessayer.',
|
||||
error: e,
|
||||
));
|
||||
}
|
||||
@@ -113,14 +115,16 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
|
||||
));
|
||||
}
|
||||
} on DioException catch (e) {
|
||||
if (e.type == DioExceptionType.cancel) return;
|
||||
emit(EvenementsNetworkError(
|
||||
message: _getNetworkErrorMessage(e),
|
||||
code: e.response?.statusCode.toString(),
|
||||
error: e,
|
||||
));
|
||||
} catch (e) {
|
||||
if (e is DioException && e.type == DioExceptionType.cancel) return;
|
||||
emit(EvenementsError(
|
||||
message: 'Erreur lors du chargement de l\'événement: $e',
|
||||
message: 'Erreur lors du chargement de l\'événement. Veuillez réessayer.',
|
||||
error: e,
|
||||
));
|
||||
}
|
||||
@@ -138,6 +142,7 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
|
||||
|
||||
emit(EvenementCreated(evenement));
|
||||
} on DioException catch (e) {
|
||||
if (e.type == DioExceptionType.cancel) return;
|
||||
if (e.response?.statusCode == 400) {
|
||||
final errors = _extractValidationErrors(e.response?.data);
|
||||
emit(EvenementsValidationError(
|
||||
@@ -153,8 +158,9 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
|
||||
));
|
||||
}
|
||||
} catch (e) {
|
||||
if (e is DioException && e.type == DioExceptionType.cancel) return;
|
||||
emit(EvenementsError(
|
||||
message: 'Erreur lors de la création de l\'événement: $e',
|
||||
message: 'Erreur lors de la création de l\'événement. Veuillez réessayer.',
|
||||
error: e,
|
||||
));
|
||||
}
|
||||
@@ -172,6 +178,7 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
|
||||
|
||||
emit(EvenementUpdated(evenement));
|
||||
} on DioException catch (e) {
|
||||
if (e.type == DioExceptionType.cancel) return;
|
||||
if (e.response?.statusCode == 400) {
|
||||
final errors = _extractValidationErrors(e.response?.data);
|
||||
emit(EvenementsValidationError(
|
||||
@@ -187,8 +194,9 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
|
||||
));
|
||||
}
|
||||
} catch (e) {
|
||||
if (e is DioException && e.type == DioExceptionType.cancel) return;
|
||||
emit(EvenementsError(
|
||||
message: 'Erreur lors de la mise à jour de l\'événement: $e',
|
||||
message: 'Erreur lors de la mise à jour de l\'événement. Veuillez réessayer.',
|
||||
error: e,
|
||||
));
|
||||
}
|
||||
@@ -206,14 +214,16 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
|
||||
|
||||
emit(EvenementDeleted(event.id));
|
||||
} on DioException catch (e) {
|
||||
if (e.type == DioExceptionType.cancel) return;
|
||||
emit(EvenementsNetworkError(
|
||||
message: _getNetworkErrorMessage(e),
|
||||
code: e.response?.statusCode.toString(),
|
||||
error: e,
|
||||
));
|
||||
} catch (e) {
|
||||
if (e is DioException && e.type == DioExceptionType.cancel) return;
|
||||
emit(EvenementsError(
|
||||
message: 'Erreur lors de la suppression de l\'événement: $e',
|
||||
message: 'Erreur lors de la suppression de l\'événement. Veuillez réessayer.',
|
||||
error: e,
|
||||
));
|
||||
}
|
||||
@@ -240,14 +250,16 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
|
||||
totalPages: result.totalPages,
|
||||
));
|
||||
} on DioException catch (e) {
|
||||
if (e.type == DioExceptionType.cancel) return;
|
||||
emit(EvenementsNetworkError(
|
||||
message: _getNetworkErrorMessage(e),
|
||||
code: e.response?.statusCode.toString(),
|
||||
error: e,
|
||||
));
|
||||
} catch (e) {
|
||||
if (e is DioException && e.type == DioExceptionType.cancel) return;
|
||||
emit(EvenementsError(
|
||||
message: 'Erreur lors du chargement des événements à venir: $e',
|
||||
message: 'Erreur lors du chargement des événements à venir. Veuillez réessayer.',
|
||||
error: e,
|
||||
));
|
||||
}
|
||||
@@ -274,14 +286,16 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
|
||||
totalPages: result.totalPages,
|
||||
));
|
||||
} on DioException catch (e) {
|
||||
if (e.type == DioExceptionType.cancel) return;
|
||||
emit(EvenementsNetworkError(
|
||||
message: _getNetworkErrorMessage(e),
|
||||
code: e.response?.statusCode.toString(),
|
||||
error: e,
|
||||
));
|
||||
} catch (e) {
|
||||
if (e is DioException && e.type == DioExceptionType.cancel) return;
|
||||
emit(EvenementsError(
|
||||
message: 'Erreur lors du chargement des événements en cours: $e',
|
||||
message: 'Erreur lors du chargement des événements en cours. Veuillez réessayer.',
|
||||
error: e,
|
||||
));
|
||||
}
|
||||
@@ -308,14 +322,16 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
|
||||
totalPages: result.totalPages,
|
||||
));
|
||||
} on DioException catch (e) {
|
||||
if (e.type == DioExceptionType.cancel) return;
|
||||
emit(EvenementsNetworkError(
|
||||
message: _getNetworkErrorMessage(e),
|
||||
code: e.response?.statusCode.toString(),
|
||||
error: e,
|
||||
));
|
||||
} catch (e) {
|
||||
if (e is DioException && e.type == DioExceptionType.cancel) return;
|
||||
emit(EvenementsError(
|
||||
message: 'Erreur lors du chargement des événements passés: $e',
|
||||
message: 'Erreur lors du chargement des événements passés. Veuillez réessayer.',
|
||||
error: e,
|
||||
));
|
||||
}
|
||||
@@ -333,14 +349,16 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
|
||||
|
||||
emit(EvenementInscrit(event.evenementId));
|
||||
} on DioException catch (e) {
|
||||
if (e.type == DioExceptionType.cancel) return;
|
||||
emit(EvenementsNetworkError(
|
||||
message: _getNetworkErrorMessage(e),
|
||||
code: e.response?.statusCode.toString(),
|
||||
error: e,
|
||||
));
|
||||
} catch (e) {
|
||||
if (e is DioException && e.type == DioExceptionType.cancel) return;
|
||||
emit(EvenementsError(
|
||||
message: 'Erreur lors de l\'inscription à l\'événement: $e',
|
||||
message: 'Erreur lors de l\'inscription à l\'événement. Veuillez réessayer.',
|
||||
error: e,
|
||||
));
|
||||
}
|
||||
@@ -358,14 +376,16 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
|
||||
|
||||
emit(EvenementDesinscrit(event.evenementId));
|
||||
} on DioException catch (e) {
|
||||
if (e.type == DioExceptionType.cancel) return;
|
||||
emit(EvenementsNetworkError(
|
||||
message: _getNetworkErrorMessage(e),
|
||||
code: e.response?.statusCode.toString(),
|
||||
error: e,
|
||||
));
|
||||
} catch (e) {
|
||||
if (e is DioException && e.type == DioExceptionType.cancel) return;
|
||||
emit(EvenementsError(
|
||||
message: 'Erreur lors de la désinscription de l\'événement: $e',
|
||||
message: 'Erreur lors de la désinscription de l\'événement. Veuillez réessayer.',
|
||||
error: e,
|
||||
));
|
||||
}
|
||||
@@ -386,14 +406,16 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
|
||||
participants: participants,
|
||||
));
|
||||
} on DioException catch (e) {
|
||||
if (e.type == DioExceptionType.cancel) return;
|
||||
emit(EvenementsNetworkError(
|
||||
message: _getNetworkErrorMessage(e),
|
||||
code: e.response?.statusCode.toString(),
|
||||
error: e,
|
||||
));
|
||||
} catch (e) {
|
||||
if (e is DioException && e.type == DioExceptionType.cancel) return;
|
||||
emit(EvenementsError(
|
||||
message: 'Erreur lors du chargement des participants: $e',
|
||||
message: 'Erreur lors du chargement des participants. Veuillez réessayer.',
|
||||
error: e,
|
||||
));
|
||||
}
|
||||
@@ -411,14 +433,16 @@ class EvenementsBloc extends Bloc<EvenementsEvent, EvenementsState> {
|
||||
|
||||
emit(EvenementsStatsLoaded(stats));
|
||||
} on DioException catch (e) {
|
||||
if (e.type == DioExceptionType.cancel) return;
|
||||
emit(EvenementsNetworkError(
|
||||
message: _getNetworkErrorMessage(e),
|
||||
code: e.response?.statusCode.toString(),
|
||||
error: e,
|
||||
));
|
||||
} catch (e) {
|
||||
if (e is DioException && e.type == DioExceptionType.cancel) return;
|
||||
emit(EvenementsError(
|
||||
message: 'Erreur lors du chargement des statistiques: $e',
|
||||
message: 'Erreur lors du chargement des statistiques. Veuillez réessayer.',
|
||||
error: e,
|
||||
));
|
||||
}
|
||||
|
||||
@@ -119,14 +119,10 @@ class EvenementRepositoryImpl implements IEvenementRepository {
|
||||
} else {
|
||||
throw Exception('Erreur lors de la récupération des événements: ${response.statusCode}');
|
||||
}
|
||||
} on DioException catch (e) {
|
||||
if (e.response != null) {
|
||||
throw Exception('Erreur HTTP ${e.response!.statusCode}: ${e.response!.data}');
|
||||
} else {
|
||||
throw Exception('Erreur réseau: ${e.type} - ${e.message ?? e.error}');
|
||||
}
|
||||
} on DioException {
|
||||
rethrow;
|
||||
} catch (e) {
|
||||
throw Exception('Erreur inattendue lors de la récupération des événements: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -143,12 +139,13 @@ class EvenementRepositoryImpl implements IEvenementRepository {
|
||||
throw Exception('Erreur lors de la récupération de l\'événement: ${response.statusCode}');
|
||||
}
|
||||
} on DioException catch (e) {
|
||||
if (e.type == DioExceptionType.cancel) rethrow;
|
||||
if (e.response?.statusCode == 404) {
|
||||
return null;
|
||||
}
|
||||
throw Exception('Erreur réseau lors de la récupération de l\'événement: ${e.message}');
|
||||
rethrow;
|
||||
} catch (e) {
|
||||
throw Exception('Erreur inattendue lors de la récupération de l\'événement: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -165,10 +162,10 @@ class EvenementRepositoryImpl implements IEvenementRepository {
|
||||
} else {
|
||||
throw Exception('Erreur lors de la création de l\'événement: ${response.statusCode}');
|
||||
}
|
||||
} on DioException catch (e) {
|
||||
throw Exception('Erreur réseau lors de la création de l\'événement: ${e.message}');
|
||||
} on DioException {
|
||||
rethrow;
|
||||
} catch (e) {
|
||||
throw Exception('Erreur inattendue lors de la création de l\'événement: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -185,10 +182,10 @@ class EvenementRepositoryImpl implements IEvenementRepository {
|
||||
} else {
|
||||
throw Exception('Erreur lors de la mise à jour de l\'événement: ${response.statusCode}');
|
||||
}
|
||||
} on DioException catch (e) {
|
||||
throw Exception('Erreur réseau lors de la mise à jour de l\'événement: ${e.message}');
|
||||
} on DioException {
|
||||
rethrow;
|
||||
} catch (e) {
|
||||
throw Exception('Erreur inattendue lors de la mise à jour de l\'événement: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -200,10 +197,10 @@ class EvenementRepositoryImpl implements IEvenementRepository {
|
||||
if (response.statusCode != 204 && response.statusCode != 200) {
|
||||
throw Exception('Erreur lors de la suppression de l\'événement: ${response.statusCode}');
|
||||
}
|
||||
} on DioException catch (e) {
|
||||
throw Exception('Erreur réseau lors de la suppression de l\'événement: ${e.message}');
|
||||
} on DioException {
|
||||
rethrow;
|
||||
} catch (e) {
|
||||
throw Exception('Erreur inattendue lors de la suppression de l\'événement: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -220,10 +217,10 @@ class EvenementRepositoryImpl implements IEvenementRepository {
|
||||
} else {
|
||||
throw Exception('Erreur lors de la récupération des événements à venir: ${response.statusCode}');
|
||||
}
|
||||
} on DioException catch (e) {
|
||||
throw Exception('Erreur réseau lors de la récupération des événements à venir: ${e.message}');
|
||||
} on DioException {
|
||||
rethrow;
|
||||
} catch (e) {
|
||||
throw Exception('Erreur inattendue lors de la récupération des événements à venir: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -240,10 +237,10 @@ class EvenementRepositoryImpl implements IEvenementRepository {
|
||||
} else {
|
||||
throw Exception('Erreur lors de la récupération des événements en cours: ${response.statusCode}');
|
||||
}
|
||||
} on DioException catch (e) {
|
||||
throw Exception('Erreur réseau lors de la récupération des événements en cours: ${e.message}');
|
||||
} on DioException {
|
||||
rethrow;
|
||||
} catch (e) {
|
||||
throw Exception('Erreur inattendue lors de la récupération des événements en cours: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -260,10 +257,10 @@ class EvenementRepositoryImpl implements IEvenementRepository {
|
||||
} else {
|
||||
throw Exception('Erreur lors de la récupération des événements passés: ${response.statusCode}');
|
||||
}
|
||||
} on DioException catch (e) {
|
||||
throw Exception('Erreur réseau lors de la récupération des événements passés: ${e.message}');
|
||||
} on DioException {
|
||||
rethrow;
|
||||
} catch (e) {
|
||||
throw Exception('Erreur inattendue lors de la récupération des événements passés: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,10 +272,10 @@ class EvenementRepositoryImpl implements IEvenementRepository {
|
||||
if (response.statusCode != 200 && response.statusCode != 201) {
|
||||
throw Exception('Erreur lors de l\'inscription à l\'événement: ${response.statusCode}');
|
||||
}
|
||||
} on DioException catch (e) {
|
||||
throw Exception('Erreur réseau lors de l\'inscription à l\'événement: ${e.message}');
|
||||
} on DioException {
|
||||
rethrow;
|
||||
} catch (e) {
|
||||
throw Exception('Erreur inattendue lors de l\'inscription à l\'événement: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -290,10 +287,10 @@ class EvenementRepositoryImpl implements IEvenementRepository {
|
||||
if (response.statusCode != 200 && response.statusCode != 204) {
|
||||
throw Exception('Erreur lors de la désinscription de l\'événement: ${response.statusCode}');
|
||||
}
|
||||
} on DioException catch (e) {
|
||||
throw Exception('Erreur réseau lors de la désinscription de l\'événement: ${e.message}');
|
||||
} on DioException {
|
||||
rethrow;
|
||||
} catch (e) {
|
||||
throw Exception('Erreur inattendue lors de la désinscription de l\'événement: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -309,10 +306,10 @@ class EvenementRepositoryImpl implements IEvenementRepository {
|
||||
} else {
|
||||
throw Exception('Erreur lors de la récupération des participants: ${response.statusCode}');
|
||||
}
|
||||
} on DioException catch (e) {
|
||||
throw Exception('Erreur réseau lors de la récupération des participants: ${e.message}');
|
||||
} on DioException {
|
||||
rethrow;
|
||||
} catch (e) {
|
||||
throw Exception('Erreur inattendue lors de la récupération des participants: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -325,7 +322,8 @@ class EvenementRepositoryImpl implements IEvenementRepository {
|
||||
return data['inscrit'] == true;
|
||||
}
|
||||
return false;
|
||||
} on DioException catch (_) {
|
||||
} on DioException catch (e) {
|
||||
if (e.type == DioExceptionType.cancel) rethrow;
|
||||
return false;
|
||||
} catch (_) {
|
||||
return false;
|
||||
@@ -342,10 +340,10 @@ class EvenementRepositoryImpl implements IEvenementRepository {
|
||||
} else {
|
||||
throw Exception('Erreur lors de la récupération des statistiques: ${response.statusCode}');
|
||||
}
|
||||
} on DioException catch (e) {
|
||||
throw Exception('Erreur réseau lors de la récupération des statistiques: ${e.message}');
|
||||
} on DioException {
|
||||
rethrow;
|
||||
} catch (e) {
|
||||
throw Exception('Erreur inattendue lors de la récupération des statistiques: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -368,14 +366,15 @@ class EvenementRepositoryImpl implements IEvenementRepository {
|
||||
throw Exception('Erreur lors de la soumission du feedback: ${response.statusCode}');
|
||||
}
|
||||
} on DioException catch (e) {
|
||||
if (e.type == DioExceptionType.cancel) rethrow;
|
||||
if (e.response?.statusCode == 400) {
|
||||
// Erreur métier (déjà soumis, pas participant, etc.)
|
||||
final errorMsg = e.response?.data['error'] ?? 'Erreur lors de la soumission du feedback';
|
||||
throw Exception(errorMsg);
|
||||
}
|
||||
throw Exception('Erreur réseau lors de la soumission du feedback: ${e.message}');
|
||||
rethrow;
|
||||
} catch (e) {
|
||||
throw Exception('Erreur inattendue lors de la soumission du feedback: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -389,10 +388,10 @@ class EvenementRepositoryImpl implements IEvenementRepository {
|
||||
} else {
|
||||
throw Exception('Erreur lors de la récupération des feedbacks: ${response.statusCode}');
|
||||
}
|
||||
} on DioException catch (e) {
|
||||
throw Exception('Erreur réseau lors de la récupération des feedbacks: ${e.message}');
|
||||
} on DioException {
|
||||
rethrow;
|
||||
} catch (e) {
|
||||
throw Exception('Erreur inattendue lors de la récupération des feedbacks: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
library event_detail_page;
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../../../shared/design_system/tokens/app_colors.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import '../../../../core/di/injection.dart';
|
||||
import '../../bloc/evenements_bloc.dart';
|
||||
@@ -52,7 +53,7 @@ class _EventDetailPageState extends State<EventDetailPage> {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('Détails de l\'événement'),
|
||||
backgroundColor: const Color(0xFF3B82F6),
|
||||
backgroundColor: AppColors.primaryGreen,
|
||||
foregroundColor: Colors.white,
|
||||
actions: [
|
||||
IconButton(
|
||||
@@ -85,12 +86,12 @@ class _EventDetailPageState extends State<EventDetailPage> {
|
||||
Widget _buildHeader() {
|
||||
return Container(
|
||||
width: double.infinity,
|
||||
padding: const EdgeInsets.all(24),
|
||||
padding: const EdgeInsets.all(16),
|
||||
decoration: BoxDecoration(
|
||||
gradient: LinearGradient(
|
||||
colors: [
|
||||
const Color(0xFF3B82F6),
|
||||
const Color(0xFF3B82F6).withOpacity(0.8),
|
||||
AppColors.primaryGreen,
|
||||
AppColors.primaryGreen.withOpacity(0.8),
|
||||
],
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
@@ -100,10 +101,10 @@ class _EventDetailPageState extends State<EventDetailPage> {
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white.withOpacity(0.2),
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
),
|
||||
child: Text(
|
||||
_getTypeLabel(widget.evenement.type),
|
||||
@@ -150,7 +151,7 @@ class _EventDetailPageState extends State<EventDetailPage> {
|
||||
|
||||
Widget _buildInfoSection() {
|
||||
return Container(
|
||||
padding: const EdgeInsets.all(16),
|
||||
padding: const EdgeInsets.all(10),
|
||||
child: Column(
|
||||
children: [
|
||||
_buildInfoRow(
|
||||
@@ -190,7 +191,7 @@ class _EventDetailPageState extends State<EventDetailPage> {
|
||||
padding: const EdgeInsets.symmetric(vertical: 8),
|
||||
child: Row(
|
||||
children: [
|
||||
Icon(icon, color: const Color(0xFF3B82F6), size: 20),
|
||||
Icon(icon, color: AppColors.primaryGreen, size: 20),
|
||||
const SizedBox(width: 12),
|
||||
Expanded(
|
||||
child: Column(
|
||||
@@ -223,14 +224,14 @@ class _EventDetailPageState extends State<EventDetailPage> {
|
||||
if (widget.evenement.description == null) return const SizedBox.shrink();
|
||||
|
||||
return Container(
|
||||
padding: const EdgeInsets.all(16),
|
||||
padding: const EdgeInsets.all(10),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
const Text(
|
||||
'Description',
|
||||
style: TextStyle(
|
||||
fontSize: 18,
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
@@ -246,21 +247,21 @@ class _EventDetailPageState extends State<EventDetailPage> {
|
||||
|
||||
Widget _buildLocationSection() {
|
||||
return Container(
|
||||
padding: const EdgeInsets.all(16),
|
||||
padding: const EdgeInsets.all(10),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
const Text(
|
||||
'Lieu',
|
||||
style: TextStyle(
|
||||
fontSize: 18,
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Row(
|
||||
children: [
|
||||
const Icon(Icons.location_on, color: Color(0xFF3B82F6)),
|
||||
const Icon(Icons.location_on, color: AppColors.primaryGreen),
|
||||
const SizedBox(width: 8),
|
||||
Expanded(
|
||||
child: Text(
|
||||
@@ -277,7 +278,7 @@ class _EventDetailPageState extends State<EventDetailPage> {
|
||||
|
||||
Widget _buildParticipantsSection() {
|
||||
return Container(
|
||||
padding: const EdgeInsets.all(16),
|
||||
padding: const EdgeInsets.all(10),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
@@ -287,7 +288,7 @@ class _EventDetailPageState extends State<EventDetailPage> {
|
||||
const Text(
|
||||
'Participants',
|
||||
style: TextStyle(
|
||||
fontSize: 18,
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
@@ -334,7 +335,7 @@ class _EventDetailPageState extends State<EventDetailPage> {
|
||||
if (!isComplet) {
|
||||
return FloatingActionButton.extended(
|
||||
onPressed: () => _showInscriptionDialog(context, isInscrit),
|
||||
backgroundColor: const Color(0xFF3B82F6),
|
||||
backgroundColor: AppColors.primaryGreen,
|
||||
icon: const Icon(Icons.check),
|
||||
label: const Text('S\'inscrire'),
|
||||
);
|
||||
@@ -424,17 +425,17 @@ class _EventDetailPageState extends State<EventDetailPage> {
|
||||
Color _getStatutColor(StatutEvenement statut) {
|
||||
switch (statut) {
|
||||
case StatutEvenement.planifie:
|
||||
return Colors.blue;
|
||||
return AppColors.info;
|
||||
case StatutEvenement.confirme:
|
||||
return Colors.green;
|
||||
return AppColors.success;
|
||||
case StatutEvenement.enCours:
|
||||
return Colors.orange;
|
||||
return AppColors.warning;
|
||||
case StatutEvenement.termine:
|
||||
return Colors.grey;
|
||||
return AppColors.textSecondaryLight;
|
||||
case StatutEvenement.annule:
|
||||
return Colors.red;
|
||||
return AppColors.error;
|
||||
case StatutEvenement.reporte:
|
||||
return Colors.purple;
|
||||
return AppColors.brandGreen;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@ class _EventsPageWithDataState extends State<EventsPageWithData> with TickerProv
|
||||
final total = widget.totalCount;
|
||||
|
||||
return Container(
|
||||
padding: const EdgeInsets.all(20),
|
||||
padding: const EdgeInsets.all(12),
|
||||
decoration: BoxDecoration(
|
||||
color: UnionFlowColors.surface,
|
||||
border: Border(bottom: BorderSide(color: UnionFlowColors.border.withOpacity(0.5), width: 1)),
|
||||
@@ -224,9 +224,9 @@ class _EventsPageWithDataState extends State<EventsPageWithData> with TickerProv
|
||||
onRefresh: () async => context.read<EvenementsBloc>().add(const LoadEvenements()),
|
||||
color: UnionFlowColors.unionGreen,
|
||||
child: ListView.separated(
|
||||
padding: const EdgeInsets.all(16),
|
||||
padding: const EdgeInsets.all(12),
|
||||
itemCount: filtered.length,
|
||||
separatorBuilder: (_, __) => const SizedBox(height: 12),
|
||||
separatorBuilder: (_, __) => const SizedBox(height: 6),
|
||||
itemBuilder: (context, index) => _buildEventCard(filtered[index]),
|
||||
),
|
||||
);
|
||||
@@ -238,11 +238,10 @@ class _EventsPageWithDataState extends State<EventsPageWithData> with TickerProv
|
||||
return GestureDetector(
|
||||
onTap: () => _showEventDetails(event),
|
||||
child: Container(
|
||||
padding: const EdgeInsets.all(16),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 7),
|
||||
decoration: BoxDecoration(
|
||||
color: UnionFlowColors.surface,
|
||||
borderRadius: BorderRadius.circular(16),
|
||||
boxShadow: UnionFlowColors.softShadow,
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
border: Border(left: BorderSide(color: _getStatutColor(event.statut), width: 4)),
|
||||
),
|
||||
child: Column(
|
||||
@@ -331,11 +330,11 @@ class _EventsPageWithDataState extends State<EventsPageWithData> with TickerProv
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Container(
|
||||
padding: const EdgeInsets.all(24),
|
||||
padding: const EdgeInsets.all(16),
|
||||
decoration: const BoxDecoration(color: UnionFlowColors.goldPale, shape: BoxShape.circle),
|
||||
child: const Icon(Icons.event_busy, size: 64, color: UnionFlowColors.gold),
|
||||
child: const Icon(Icons.event_busy, size: 40, color: UnionFlowColors.gold),
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
const SizedBox(height: 12),
|
||||
Text('Aucun événement $type', style: const TextStyle(fontSize: 16, fontWeight: FontWeight.w700, color: UnionFlowColors.textPrimary)),
|
||||
const SizedBox(height: 8),
|
||||
Text(_searchQuery.isEmpty ? 'La liste est vide pour le moment' : 'Essayez une autre recherche', style: const TextStyle(fontSize: 13, color: UnionFlowColors.textSecondary)),
|
||||
|
||||
Reference in New Issue
Block a user