feat(features): refontes adhesions/admin/auth/backup/contributions/dashboard/epargne/events

- adhesions : bloc complet avec events/states/model, dialogs paiement/rejet
- admin : users bloc, user management list/detail pages
- authentication : bloc + keycloak auth service + webview
- backup : bloc complet, repository, models
- contributions : bloc + widgets + export
- dashboard : widgets connectés (activities, events, notifications, search)
  + charts + monitoring + shortcuts
- epargne : repository, transactions, dialogs
- events : bloc complet, pages (detail, connected, wrapper), models
This commit is contained in:
dahoud
2026-04-15 20:26:48 +00:00
parent 45dcd2171e
commit 120434aba0
36 changed files with 903 additions and 1411 deletions

View File

@@ -8,6 +8,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:get_it/get_it.dart';
import '../../../../shared/design_system/tokens/color_tokens.dart';
import '../../../../shared/widgets/error_widget.dart';
import '../../../../shared/widgets/loading_widget.dart';
import '../../../../core/utils/logger.dart';
@@ -57,7 +58,7 @@ class EventsPageConnected extends StatelessWidget {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(state.message),
backgroundColor: Colors.red,
backgroundColor: ColorTokens.error,
duration: const Duration(seconds: 4),
action: SnackBarAction(
label: 'Réessayer',
@@ -76,40 +77,28 @@ class EventsPageConnected extends StatelessWidget {
// État initial
if (state is EvenementsInitial) {
return Container(
color: const Color(0xFFF8F9FA),
child: const Center(
child: AppLoadingWidget(message: 'Initialisation...'),
),
return const Center(
child: AppLoadingWidget(message: 'Initialisation...'),
);
}
// État de chargement
if (state is EvenementsLoading) {
return Container(
color: const Color(0xFFF8F9FA),
child: const Center(
child: AppLoadingWidget(message: 'Chargement des événements...'),
),
return const Center(
child: AppLoadingWidget(message: 'Chargement des événements...'),
);
}
// État de rafraîchissement
if (state is EvenementsRefreshing) {
return Container(
color: const Color(0xFFF8F9FA),
child: const Center(
child: AppLoadingWidget(message: 'Actualisation...'),
),
return const Center(
child: AppLoadingWidget(message: 'Actualisation...'),
);
}
if (state is EvenementCreated) {
return Container(
color: const Color(0xFFF8F9FA),
child: const Center(
child: AppLoadingWidget(message: 'Actualisation...'),
),
return const Center(
child: AppLoadingWidget(message: 'Actualisation...'),
);
}
@@ -140,39 +129,30 @@ class EventsPageConnected extends StatelessWidget {
// État d'erreur réseau
if (state is EvenementsNetworkError) {
AppLogger.error('EventsPageConnected: Erreur réseau', error: state.message);
return Container(
color: const Color(0xFFF8F9FA),
child: NetworkErrorWidget(
onRetry: () {
AppLogger.userAction('Retry load evenements after network error');
context.read<EvenementsBloc>().add(const LoadEvenements());
},
),
return NetworkErrorWidget(
onRetry: () {
AppLogger.userAction('Retry load evenements after network error');
context.read<EvenementsBloc>().add(const LoadEvenements());
},
);
}
// État d'erreur générale
if (state is EvenementsError) {
AppLogger.error('EventsPageConnected: Erreur', error: state.message);
return Container(
color: const Color(0xFFF8F9FA),
child: AppErrorWidget(
message: state.message,
onRetry: () {
AppLogger.userAction('Retry load evenements after error');
context.read<EvenementsBloc>().add(const LoadEvenements());
},
),
return AppErrorWidget(
message: state.message,
onRetry: () {
AppLogger.userAction('Retry load evenements after error');
context.read<EvenementsBloc>().add(const LoadEvenements());
},
);
}
// État par défaut
AppLogger.warning('EventsPageConnected: État non géré: ${state.runtimeType}');
return Container(
color: const Color(0xFFF8F9FA),
child: const Center(
child: AppLoadingWidget(message: 'Chargement...'),
),
return const Center(
child: AppLoadingWidget(message: 'Chargement...'),
);
},
),