5.6 KiB
5.6 KiB
Dashboard Module - Architecture Modulaire
📁 Structure des Fichiers
dashboard/
├── presentation/
│ ├── pages/
│ │ └── dashboard_page_stable.dart # Page principale du dashboard
│ └── widgets/
│ ├── widgets.dart # Index des exports
│ ├── dashboard_welcome_section.dart # Section de bienvenue
│ ├── dashboard_stats_grid.dart # Grille de statistiques
│ ├── dashboard_stats_card.dart # Carte de statistique individuelle
│ ├── dashboard_quick_actions_grid.dart # Grille d'actions rapides
│ ├── dashboard_quick_action_button.dart # Bouton d'action individuel
│ ├── dashboard_recent_activity_section.dart # Section d'activité récente
│ ├── dashboard_activity_tile.dart # Tuile d'activité individuelle
│ ├── dashboard_insights_section.dart # Section d'insights/métriques
│ ├── dashboard_metric_row.dart # Ligne de métrique avec progression
│ └── dashboard_drawer.dart # Menu latéral de navigation
└── README.md # Cette documentation
🏗️ Architecture
Principe de Séparation
Chaque widget est dans son propre fichier pour garantir :
- Maintenabilité : Modifications isolées sans impact sur les autres composants
- Réutilisabilité : Widgets réutilisables dans d'autres contextes
- Testabilité : Tests unitaires focalisés sur chaque composant
- Lisibilité : Code organisé et facile à comprendre
Hiérarchie des Widgets
🔝 Niveau Page
DashboardPageStable: Page principale qui orchestre tous les widgets
🏢 Niveau Section
DashboardWelcomeSection: Message d'accueil avec gradientDashboardStatsGrid: Grille 2x2 des statistiques principalesDashboardQuickActionsGrid: Grille 2x2 des actions rapidesDashboardRecentActivitySection: Liste des activités récentesDashboardInsightsSection: Métriques de performanceDashboardDrawer: Menu latéral de navigation
⚛️ Niveau Atomique
DashboardStatsCard: Carte individuelle de statistiqueDashboardQuickActionButton: Bouton d'action individuelDashboardActivityTile: Tuile d'activité individuelleDashboardMetricRow: Ligne de métrique avec barre de progression
📊 Modèles de Données
DashboardStat
class DashboardStat {
final IconData icon;
final String value;
final String title;
final Color color;
final VoidCallback? onTap;
}
DashboardQuickAction
class DashboardQuickAction {
final IconData icon;
final String title;
final Color color;
final VoidCallback? onTap;
}
DashboardActivity
class DashboardActivity {
final String title;
final String subtitle;
final IconData icon;
final Color color;
final String time;
final VoidCallback? onTap;
}
DashboardMetric
class DashboardMetric {
final String label;
final String value;
final double progress;
final Color color;
final VoidCallback? onTap;
}
DrawerMenuItem
class DrawerMenuItem {
final IconData icon;
final String title;
final VoidCallback? onTap;
}
🎨 Design System
Tous les widgets utilisent les tokens du design system :
- ColorTokens : Palette de couleurs cohérente
- TypographyTokens : Système typographique hiérarchisé
- SpacingTokens : Espacement basé sur une grille 4px
🔄 Callbacks et Navigation
Chaque widget expose des callbacks pour les interactions :
onStatTap(String statType): Action sur une statistiqueonActionTap(String actionType): Action rapideonActivityTap(String activityId): Détail d'une activitéonMetricTap(String metricType): Détail d'une métriqueonNavigate(String route): Navigation depuis le draweronLogout(): Déconnexion
📱 Responsive Design
Tous les widgets sont conçus pour être responsifs :
- Grilles avec
childAspectRatiooptimisé - Padding et spacing adaptatifs
- Typographie scalable
- Icônes avec tailles cohérentes
🧪 Tests
Structure recommandée pour les tests :
test/
├── features/
│ └── dashboard/
│ └── presentation/
│ └── widgets/
│ ├── dashboard_welcome_section_test.dart
│ ├── dashboard_stats_card_test.dart
│ ├── dashboard_quick_action_button_test.dart
│ └── ...
🚀 Utilisation
Import Simple
import '../widgets/widgets.dart'; // Importe tous les widgets
Utilisation dans une Page
class MyDashboard extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
DashboardWelcomeSection(),
DashboardStatsGrid(onStatTap: _handleStatTap),
DashboardQuickActionsGrid(onActionTap: _handleAction),
// ...
],
),
);
}
}
🔧 Maintenance
Ajout d'un Nouveau Widget
- Créer le fichier dans
widgets/ - Implémenter le widget avec sa documentation
- Ajouter l'export dans
widgets.dart - Créer les tests correspondants
- Mettre à jour cette documentation
Modification d'un Widget Existant
- Modifier uniquement le fichier concerné
- Vérifier que les interfaces (callbacks) restent compatibles
- Mettre à jour les tests si nécessaire
- Tester l'impact sur les widgets parents
Cette architecture garantit une maintenabilité optimale et une évolutivité maximale du module dashboard.