Couche présentation - ApplETS/Notre-Dame GitHub Wiki

🎨 Couche UI (Présentation)

Vue d'Ensemble

La couche UI gère tout ce qui est lié à l'affichage et l'interaction utilisateur.

UI Layer
├── Views          # Écrans/Pages
├── ViewModels     # Logique d'affichage et gestion d'état
├── Widgets        # Composants réutilisables
├── Navigation     # Routing et navigation
└── Core
    ├── Themes     # Thèmes et styles
    └── Shared     # Widgets partagés

🎯 Responsabilités

Afficher les données à l'utilisateur
Capturer les interactions (clics, saisies)
Appeler les ViewModels
Observer les changements d'état
Utiliser les thèmes et styles
Gérer la navigation


📱 Structure d'une Feature UI

Layout Recommandé

ui/my_feature/
├── widgets/
│   ├── my_view.dart          # Vue principale
│   └── my_widget.dart        # Sous-composants
├── view_model/
│   └── my_viewmodel.dart
└── models/                   # Models locaux (optionnel)
    └── my_local_model.dart

Exemple Complet : Feature Schedule

ui/schedule/
├── schedule_controller.dart
├── widgets/
│   ├── schedule_view.dart
│   ├── tiles/
│   │   ├── calendar_event_tile.dart
│   │   └── listview_event_tile.dart
│   ├── calendars/
│   │   ├── day_calendar.dart
│   │   ├── week_calendar.dart
│   │   └── month_calendar.dart
│   └── schedule_settings.dart
└── view_model/
    └── schedule_viewmodel.dart

📄 Views (Écrans)

Les Views sont les écrans de l'application.

🧩 Widgets Réutilisables

Les Widgets sont des composants réutilisables qui composent des views.


🏛️ ViewModels

Les ViewModels gèrent la logique d'affichage et l'état local.

Principes du ViewModel

  1. Hérité de ChangeNotifier pour la réactivité avec Provider
  2. État privé (_variable) avec getters publics
  3. Appelle les Repositories pour accéder aux données
  4. Gère la logique d'affichage (filtrage, tri, etc.)
  5. Appelle notifyListeners() après chaque changement d'état

✅ Checklist pour Nouvelle View

  • Hériter de StatelessWidget ou StatefulWidget
  • Utilise Consumer<ViewModel> pour réactivité
  • Gère les états (loading, error, data)
  • Thème appliqué (AppTheme)
  • Responsive design
  • Interactions utilisateur bien gérées
  • Tests unitaires
  • Documentation

Cette page a été en partie générée avec l'aide de Claude Haiku 4.5

⚠️ **GitHub.com Fallback** ⚠️