On release/v3.1.4: Sauvegarde temporaire pour changement de branche

This commit is contained in:
2025-08-21 17:51:22 +02:00
parent d275d0ab0c
commit f5bef999df
64 changed files with 85343 additions and 83615 deletions

View File

@@ -1325,6 +1325,126 @@ graph TD
E -->|ValueListenableBuilder| A
```
## 📱 Widgets de passages et navigation
### 🎯 PassagesListWidget
Le widget `PassagesListWidget` est le composant central pour l'affichage et la gestion des passages dans toute l'application. Il offre une expérience utilisateur cohérente avec des fonctionnalités adaptatives selon le contexte.
#### ✨ Fonctionnalités principales
- **Affichage adaptatif** : Liste complète ou tableau de bord avec fond transparent
- **Flux conditionnel de clic** : Comportement intelligent selon le type de passage
- **Bouton de création intégré** : Bouton "+" vert dans l'en-tête pour ajouter des passages
- **Filtrage avancé** : Par type, utilisateur, période, avec exclusions possibles
- **Actions contextuelles** : Modification, suppression, génération de reçus
#### 🔄 Flux conditionnel des clics sur passages
Le widget implémente un comportement intelligent lors du clic sur un passage :
```dart
// Logique de gestion des clics
void _handlePassageClick(Map<String, dynamic> passage) {
final int passageType = passage['type'] as int? ?? 1;
if (passageType == 2) {
// Type 2 (À finaliser) : Ouverture directe du formulaire d'édition
_showEditDialog(context, passageModel);
} else {
// Autres types : Affichage des détails avec option de modification
_showDetailsDialogWithEditOption(context, passage, passageModel);
}
}
```
**Comportements par type de passage :**
- **Type 1 (Réalisé)** : Affiche les détails complets avec option "Modifier"
- **Type 2 (À finaliser)** : Ouvre directement le formulaire d'édition pour finalisation rapide
- **Type 3 (Absent)** : Affiche les détails avec options limitées
- **Type 4 (Refusé)** : Affiche les détails en lecture seule
#### 🎨 Dialog de détails amélioré
La boîte de dialogue des détails a été repensée pour une meilleure lisibilité :
- **Organisation par sections** : Client, Passage, Lieu avec icônes distinctives
- **Badges colorés** : Visualisation rapide du type et statut
- **Formatage intelligent** : Dates, montants et informations structurées
- **Actions contextuelles** : Boutons adaptés selon les permissions
#### Bouton de création contextuel
Le widget intègre un bouton "+" vert flottant dans l'en-tête pour créer de nouveaux passages :
```dart
// Paramètres pour activer le bouton de création
PassagesListWidget(
showAddButton: true, // Active le bouton "+"
onAddPassage: () async {
// Logique de création avec PassageFormDialog
await _showPassageFormDialog(context);
},
)
```
**Pages avec bouton de création activé :**
- `user_field_mode_page.dart` : Mode terrain pour création rapide
- `user_history_page.dart` : Historique avec ajout possible
- `admin_history_page.dart` : Gestion administrative complète
### 🎯 DashboardAppBar - Évolution de l'interface
#### ❌ Suppression du bouton "Nouveau passage"
Le bouton global "Nouveau passage" a été **définitivement retiré** de la barre d'application (`DashboardAppBar`) pour privilégier une approche contextuelle :
**Avant :**
- Bouton toujours visible dans l'AppBar
- Création de passage possible depuis n'importe quelle page
- Confusion possible sur le contexte de création
**Après :**
- Boutons "+" contextuels dans les pages appropriées
- Création limitée aux contextes pertinents
- Interface épurée et plus intuitive
#### 🎨 Architecture simplifiée
La suppression du bouton global a permis de :
- Nettoyer les dépendances (`passage_form_dialog.dart`, `app_keys.dart`)
- Simplifier les paramètres de `DashboardLayout`
- Réduire la complexité de navigation
- Améliorer la cohérence UX
### 🎯 Mode tableau de bord
Pour les pages de tableau de bord, le `PassagesListWidget` s'adapte automatiquement :
#### 🏠 Page d'accueil utilisateur
Dans `user_dashboard_home_page.dart`, l'affichage est optimisé :
```dart
// Configuration pour le tableau de bord
SizedBox(
height: 450, // Hauteur fixe pour éviter l'overflow
child: PassagesListWidget(
passages: recentPassages,
showFilters: false, // Pas de filtres sur le dashboard
showSearch: false, // Pas de recherche
maxPassages: 20, // Limite aux 20 plus récents
transparentBackground: true, // Fond transparent pour intégration
),
)
```
**Améliorations du dashboard :**
- Suppression de la Card wrapper pour un design épuré
- Fond transparent pour intégration harmonieuse
- En-tête coloré maintenu pour la lisibilité
- Limite augmentée à 20 passages récents (au lieu de 10)
### ✨ Composants de l'architecture
#### **1. Page Parente (ex: AdminOperationsPage)**