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

@@ -37,7 +37,7 @@ class DashboardNotificationsWidget extends StatelessWidget {
} else if (state is DashboardError) {
return _buildErrorNotifications();
}
return _buildEmptyNotifications();
return _buildEmptyNotifications(context);
},
),
],
@@ -49,7 +49,7 @@ class DashboardNotificationsWidget extends StatelessWidget {
return Container(
padding: const EdgeInsets.all(12),
decoration: BoxDecoration(
color: AppColors.primaryGreen.withOpacity(0.05),
color: AppColors.primary.withOpacity(0.05),
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(12),
topRight: Radius.circular(12),
@@ -60,7 +60,7 @@ class DashboardNotificationsWidget extends StatelessWidget {
Container(
padding: const EdgeInsets.all(6),
decoration: BoxDecoration(
color: AppColors.primaryGreen,
color: AppColors.primary,
borderRadius: BorderRadius.circular(4),
),
child: const Icon(
@@ -74,7 +74,7 @@ class DashboardNotificationsWidget extends StatelessWidget {
child: Text(
'NOTIFICATIONS',
style: AppTypography.subtitleSmall.copyWith(
color: AppColors.primaryGreen,
color: AppColors.primary,
fontWeight: FontWeight.bold,
letterSpacing: 1.1,
),
@@ -119,25 +119,26 @@ class DashboardNotificationsWidget extends StatelessWidget {
Widget _buildNotifications(BuildContext context, DashboardEntity data) {
final notifications = _generateNotifications(context, data);
if (notifications.isEmpty) {
return _buildEmptyNotifications();
return _buildEmptyNotifications(context);
}
return Column(
children: notifications.take(maxNotifications).map((notification) {
return _buildNotificationItem(notification);
return _buildNotificationItem(context, notification);
}).toList(),
);
}
Widget _buildNotificationItem(DashboardNotification notification) {
Widget _buildNotificationItem(BuildContext context, DashboardNotification notification) {
final isDark = Theme.of(context).brightness == Brightness.dark;
return Container(
padding: const EdgeInsets.all(12),
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
color: AppColors.lightBorder,
color: isDark ? AppColors.borderDark : AppColors.border,
width: 1,
),
),
@@ -199,7 +200,7 @@ class DashboardNotificationsWidget extends StatelessWidget {
Text(
notification.message,
style: AppTypography.subtitleSmall.copyWith(
color: AppColors.textSecondaryLight,
color: isDark ? AppColors.textSecondaryDark : AppColors.textSecondary,
fontSize: 10,
),
),
@@ -209,7 +210,7 @@ class DashboardNotificationsWidget extends StatelessWidget {
Text(
notification.timeAgo,
style: AppTypography.subtitleSmall.copyWith(
color: AppColors.textSecondaryLight,
color: isDark ? AppColors.textSecondaryDark : AppColors.textSecondary,
fontSize: 9,
),
),
@@ -220,7 +221,7 @@ class DashboardNotificationsWidget extends StatelessWidget {
child: Text(
notification.actionLabel!,
style: AppTypography.badgeText.copyWith(
color: AppColors.primaryGreen,
color: AppColors.primary,
fontWeight: FontWeight.bold,
fontSize: 9,
),
@@ -268,15 +269,16 @@ class DashboardNotificationsWidget extends StatelessWidget {
);
}
Widget _buildEmptyNotifications() {
Widget _buildEmptyNotifications(BuildContext context) {
final isDark = Theme.of(context).brightness == Brightness.dark;
return Container(
padding: const EdgeInsets.all(24),
child: Center(
child: Column(
children: [
const Icon(
Icon(
Icons.notifications_none_outlined,
color: AppColors.textSecondaryLight,
color: isDark ? AppColors.textSecondaryDark : AppColors.textSecondary,
size: 24,
),
const SizedBox(height: 8),
@@ -359,7 +361,7 @@ class DashboardNotificationsWidget extends StatelessWidget {
title: 'Nouvelles activités',
message: '${data.recentActivitiesCount} activités récentes',
icon: Icons.fiber_new_outlined,
color: AppColors.brandGreen,
color: AppColors.primaryDark,
timeAgo: '15min',
isUrgent: false,
actionLabel: 'Voir',