feat(ui): dark mode adaptatif sur 15 pages/widgets restants

Pattern AppColors pair (isDark ternaries) appliqué sur :
- login_page : SnackBar error color Color(0xFFDC2626) → AppColors.error
  (gradient brand intentionnel non modifié)
- help_support : barre de recherche + ExpansionTile + chevrons → scheme adaptatif
- system_settings : état 'Accès réservé' + unselectedLabelColor TabBar
- epargne : date/description/boutons OutlinedButton foregroundColor adaptatifs
- conversation_tile, connected_recent_activities, connected_upcoming_events
- dashboard_notifications_widget
- budgets_list_page, pending_approvals_page, approve/reject_dialog
- create_organization_page, edit_organization_page, about_page

Les couleurs sémantiques (error, success, warning, primary) restent inchangées.
Les blancs/gradients intentionnels (AppBars brand, logos payment) préservés.
This commit is contained in:
dahoud
2026-04-15 20:14:59 +00:00
parent b2f29922d3
commit ba779a7a40
15 changed files with 1002 additions and 1146 deletions

View File

@@ -30,14 +30,14 @@ class ConnectedUpcomingEvents extends StatelessWidget {
if (state is DashboardLoading) {
return _buildLoadingList();
} else if (state is DashboardLoaded || state is DashboardRefreshing) {
final data = state is DashboardLoaded
? state.dashboardData
final data = state is DashboardLoaded
? state.dashboardData
: (state as DashboardRefreshing).dashboardData;
return _buildEventsList(context, data.upcomingEvents);
} else if (state is DashboardError) {
return _buildErrorState(state.message);
}
return _buildEmptyState();
return _buildEmptyState(context);
},
),
],
@@ -50,7 +50,7 @@ class ConnectedUpcomingEvents extends StatelessWidget {
children: [
const Icon(
Icons.event_outlined,
color: AppColors.primaryGreen,
color: AppColors.primary,
size: 18,
),
const SizedBox(width: 8),
@@ -66,7 +66,7 @@ class ConnectedUpcomingEvents extends StatelessWidget {
child: Text(
'TOUT VOIR',
style: AppTypography.badgeText.copyWith(
color: AppColors.primaryGreen,
color: AppColors.primary,
fontWeight: FontWeight.bold,
),
),
@@ -77,7 +77,7 @@ class ConnectedUpcomingEvents extends StatelessWidget {
Widget _buildEventsList(BuildContext context, List<UpcomingEventEntity> events) {
if (events.isEmpty) {
return _buildEmptyState();
return _buildEmptyState(context);
}
final displayEvents = events.take(maxItems).toList();
@@ -99,7 +99,7 @@ class ConnectedUpcomingEvents extends StatelessWidget {
}
Widget _buildEventCard(BuildContext context, UpcomingEventEntity event) {
final statusColor = event.isToday ? AppColors.success : (event.isTomorrow ? AppColors.warning : AppColors.primaryGreen);
final statusColor = event.isToday ? AppColors.success : (event.isTomorrow ? AppColors.warning : AppColors.primary);
return CoreCard(
backgroundColor: Theme.of(context).cardColor,
@@ -140,7 +140,7 @@ class ConnectedUpcomingEvents extends StatelessWidget {
),
Row(
children: [
const Icon(Icons.location_on_outlined, size: 10, color: AppColors.textSecondaryLight),
Icon(Icons.location_on_outlined, size: 10, color: Theme.of(context).colorScheme.onSurfaceVariant),
const SizedBox(width: 4),
Expanded(
child: Text(
@@ -188,7 +188,7 @@ class ConnectedUpcomingEvents extends StatelessWidget {
child: LinearProgressIndicator(
value: event.fillPercentage,
minHeight: 4,
backgroundColor: AppColors.lightBorder,
backgroundColor: Theme.of(context).brightness == Brightness.dark ? AppColors.borderDark : AppColors.border,
valueColor: AlwaysStoppedAnimation<Color>(
event.isFull ? AppColors.error : (event.isAlmostFull ? AppColors.warning : AppColors.success),
),
@@ -230,11 +230,12 @@ class ConnectedUpcomingEvents extends StatelessWidget {
);
}
Widget _buildEmptyState() {
Widget _buildEmptyState(BuildContext context) {
final isDark = Theme.of(context).brightness == Brightness.dark;
return Center(
child: Column(
children: [
const Icon(Icons.event_outlined, color: AppColors.textSecondaryLight, size: 32),
Icon(Icons.event_outlined, color: isDark ? AppColors.textSecondaryDark : AppColors.textSecondary, size: 32),
const SizedBox(height: 8),
const Text('AUCUN ÉVÉNEMENT', style: AppTypography.subtitleSmall),
Text('Les événements apparaîtront ici', style: AppTypography.subtitleSmall.copyWith(fontSize: 10)),