feat(design-system): dark mode adaptatif sur widgets partagés

Pattern AppColors pair (isDark ? AppColors.surfaceDark : AppColors.surface)
appliqué sur :
- UnionStatWidget, UnionBalanceCard, UnionActionButton, UFSectionHeader
- DashboardEventRow, DashboardActivityRow, UnionExportButton
- MiniAvatar (border adaptatif)
- ConfirmationDialog (cancel colors adaptés)
- FileUploadWidget (textSecondary adaptatif)

Les couleurs surface/border/textPrimary/textSecondary hardcodées (light-only)
sont remplacées par les paires *Dark conditionnelles.
Les couleurs sémantiques (error, success, warning, primary) restent inchangées.
This commit is contained in:
dahoud
2026-04-15 20:13:22 +00:00
parent 318195c6fd
commit 0abcdcc478
10 changed files with 153 additions and 174 deletions

View File

@@ -3,6 +3,7 @@
library confirmation_dialog;
import 'package:flutter/material.dart';
import '../design_system/tokens/app_colors.dart';
/// Type d'action pour personnaliser l'apparence du dialogue
enum ConfirmationAction {
@@ -70,7 +71,7 @@ class ConfirmationDialog extends StatelessWidget {
@override
Widget build(BuildContext context) {
final colors = _getColors();
final colors = _getColors(context);
return AlertDialog(
shape: RoundedRectangleBorder(
@@ -159,43 +160,44 @@ class ConfirmationDialog extends StatelessWidget {
}
}
Map<String, Color> _getColors() {
Map<String, Color> _getColors(BuildContext context) {
final isDark = Theme.of(context).brightness == Brightness.dark;
switch (action) {
case ConfirmationAction.delete:
return {
'icon': Colors.red,
'title': Colors.red[700]!,
'button': Colors.red,
'icon': AppColors.error,
'title': AppColors.error,
'button': AppColors.error,
};
case ConfirmationAction.deactivate:
return {
'icon': Colors.orange,
'title': Colors.orange[700]!,
'button': Colors.orange,
'icon': AppColors.warning,
'title': AppColors.warning,
'button': AppColors.warning,
};
case ConfirmationAction.activate:
return {
'icon': Colors.green,
'title': Colors.green[700]!,
'button': Colors.green,
'icon': AppColors.success,
'title': AppColors.success,
'button': AppColors.success,
};
case ConfirmationAction.cancel:
return {
'icon': Colors.grey,
'title': Colors.grey[700]!,
'button': Colors.grey,
'icon': isDark ? AppColors.textSecondaryDark : AppColors.textTertiary,
'title': isDark ? AppColors.textSecondaryDark : AppColors.textSecondary,
'button': isDark ? AppColors.textSecondaryDark : AppColors.textTertiary,
};
case ConfirmationAction.warning:
return {
'icon': Colors.amber,
'title': Colors.amber[700]!,
'button': Colors.amber,
'icon': AppColors.warningUI,
'title': AppColors.warning,
'button': AppColors.warningUI,
};
case ConfirmationAction.info:
return {
'icon': Colors.blue,
'title': Colors.blue[700]!,
'button': Colors.blue,
'icon': AppColors.info,
'title': AppColors.primary,
'button': AppColors.info,
};
}
}