feat(features): refontes explore/feed/finance_workflow/help/logs/members/notifications

- explore + feed : pages de découverte (réseau, fil d'actualité)
- finance_workflow : approvals bloc + budgets bloc + dialogs
- help : support page avec FAQ + contact
- logs : monitoring bloc avec metrics + alerts + searchLogs
- members : recherche avancée, bulk actions, bloc complet, import/export
- notifications : bloc + page
This commit is contained in:
dahoud
2026-04-15 20:27:01 +00:00
parent 120434aba0
commit dbf6a972ba
7 changed files with 84 additions and 78 deletions

View File

@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:fl_chart/fl_chart.dart';
import '../../../../shared/models/membre_search_result.dart';
import '../../../../shared/design_system/tokens/app_colors.dart';
/// Widget d'affichage des statistiques de recherche
/// Présente les métriques et graphiques des résultats de recherche
@@ -81,7 +82,7 @@ class SearchStatisticsCard extends StatelessWidget {
'Total Membres',
statistics.totalMembres.toString(),
Icons.people,
Colors.blue,
AppColors.info,
),
),
const SizedBox(width: 12),
@@ -91,7 +92,7 @@ class SearchStatisticsCard extends StatelessWidget {
'Membres Actifs',
statistics.membresActifs.toString(),
Icons.person,
Colors.green,
AppColors.success,
),
),
],
@@ -105,7 +106,7 @@ class SearchStatisticsCard extends StatelessWidget {
'Âge Moyen',
'${statistics.ageMoyen.toStringAsFixed(1)} ans',
Icons.cake,
Colors.orange,
AppColors.warning,
),
),
const SizedBox(width: 12),
@@ -155,7 +156,7 @@ class SearchStatisticsCard extends StatelessWidget {
Text(
title,
style: Theme.of(context).textTheme.bodySmall?.copyWith(
color: Colors.grey[600],
color: Theme.of(context).colorScheme.onSurfaceVariant,
),
textAlign: TextAlign.center,
),
@@ -196,7 +197,7 @@ class SearchStatisticsCard extends StatelessWidget {
PieChartSectionData(
value: statistics.membresActifs.toDouble(),
title: '${statistics.pourcentageActifs.toStringAsFixed(1)}%',
color: Colors.green,
color: AppColors.success,
radius: 60,
titleStyle: const TextStyle(
fontSize: 12,
@@ -208,7 +209,7 @@ class SearchStatisticsCard extends StatelessWidget {
PieChartSectionData(
value: statistics.membresInactifs.toDouble(),
title: '${statistics.pourcentageInactifs.toStringAsFixed(1)}%',
color: Colors.orange,
color: AppColors.warning,
radius: 60,
titleStyle: const TextStyle(
fontSize: 12,
@@ -232,14 +233,14 @@ class SearchStatisticsCard extends StatelessWidget {
_buildLegendItem(
'Actifs',
statistics.membresActifs,
Colors.green,
AppColors.success,
),
const SizedBox(height: 8),
if (statistics.membresInactifs > 0)
_buildLegendItem(
'Inactifs',
statistics.membresInactifs,
Colors.orange,
AppColors.warning,
),
],
),
@@ -335,7 +336,7 @@ class SearchStatisticsCard extends StatelessWidget {
Icon(
icon,
size: 20,
color: Colors.grey[600],
color: Theme.of(context).colorScheme.onSurfaceVariant,
),
const SizedBox(width: 12),
Expanded(
@@ -382,26 +383,26 @@ class SearchStatisticsCard extends StatelessWidget {
Text(
statistics.description,
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
color: Colors.grey[700],
color: Theme.of(context).colorScheme.onSurfaceVariant,
),
),
const SizedBox(height: 16),
Container(
padding: const EdgeInsets.all(12.0),
decoration: BoxDecoration(
color: Colors.blue.withOpacity(0.1),
color: AppColors.infoContainer,
borderRadius: BorderRadius.circular(8),
border: Border.all(color: Colors.blue.withOpacity(0.3)),
border: Border.all(color: AppColors.info),
),
child: Row(
children: [
const Icon(Icons.lightbulb, color: Colors.blue),
const Icon(Icons.lightbulb, color: AppColors.info),
const SizedBox(width: 8),
Expanded(
child: Text(
'Ces statistiques sont calculées en temps réel sur les résultats de votre recherche.',
style: Theme.of(context).textTheme.bodySmall?.copyWith(
color: Colors.blue[700],
color: AppColors.primaryDark,
),
),
),