# Documentation des Widgets Amicale Cette documentation explique comment utiliser les widgets `AmicaleRowWidget` et `AmicaleTableWidget` pour afficher et gérer les données des amicales dans l'application. ## AmicaleRowWidget Le widget `AmicaleRowWidget` représente une ligne dans un tableau d'amicales. Il affiche les informations d'une amicale avec les colonnes suivantes : - ID - Nom - Code Postal - Région - Actions (boutons selon les droits de l'utilisateur) ### Propriétés | Propriété | Type | Description | | ------------- | --------------- | ---------------------------------------------------------------------------------- | | `amicale` | `AmicaleModel` | **Obligatoire**. L'objet amicale à afficher. | | `onEdit` | `VoidCallback?` | Fonction appelée lorsque l'utilisateur clique sur le bouton d'édition. | | `onDelete` | `VoidCallback?` | Fonction appelée lorsque l'utilisateur clique sur le bouton de suppression. | | `isAlternate` | `bool` | Indique si la ligne doit avoir une couleur de fond alternée. Par défaut à `false`. | ### Gestion des droits d'accès Le widget gère automatiquement l'affichage des boutons d'action en fonction du rôle de l'utilisateur : - Le bouton d'édition (crayon) est visible pour tous les utilisateurs avec un rôle > 1 - Le bouton de suppression (corbeille) est visible uniquement pour les utilisateurs avec un rôle > 2 ### Exemple d'utilisation ```dart AmicaleRowWidget( amicale: amicale, isAlternate: index % 2 == 1, // Alterner les couleurs onEdit: () { // Code pour gérer l'édition }, onDelete: () { // Code pour gérer la suppression }, ) ``` ## AmicaleTableWidget Le widget `AmicaleTableWidget` affiche un tableau complet d'amicales avec un en-tête et des lignes. Il utilise le widget `AmicaleRowWidget` pour afficher chaque ligne. ### Propriétés | Propriété | Type | Description | | -------------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | `amicales` | `List` | **Obligatoire**. La liste des amicales à afficher. | | `onEdit` | `Function(AmicaleModel)?` | Fonction appelée lorsque l'utilisateur clique sur le bouton d'édition d'une amicale. | | `onDelete` | `Function(AmicaleModel)?` | Fonction appelée lorsque l'utilisateur clique sur le bouton de suppression d'une amicale. | | `isLoading` | `bool` | Indique si les données sont en cours de chargement. Affiche un indicateur de chargement si `true`. Par défaut à `false`. | | `emptyMessage` | `String?` | Message à afficher lorsque la liste des amicales est vide. | ### États du tableau Le widget gère automatiquement différents états : 1. **Chargement** : Affiche un indicateur de chargement circulaire lorsque `isLoading` est `true`. 2. **Liste vide** : Affiche un message lorsque la liste des amicales est vide. 3. **Affichage normal** : Affiche la liste des amicales avec des lignes alternées. ### Exemple d'utilisation ```dart AmicaleTableWidget( amicales: _amicales, isLoading: _isLoading, onEdit: (amicale) { // Code pour gérer l'édition de l'amicale }, onDelete: (amicale) { // Code pour gérer la suppression de l'amicale }, emptyMessage: 'Aucune amicale trouvée. Veuillez en créer une nouvelle.', ) ``` ## Intégration avec AmicaleRepository Pour utiliser ces widgets avec le repository des amicales, vous devez : 1. Récupérer les amicales depuis le repository : ```dart final amicaleRepository = Provider.of(context, listen: false); final amicales = amicaleRepository.getAllAmicales(); ``` 2. Gérer les actions d'édition et de suppression : ```dart void _handleEdit(AmicaleModel amicale) { // Naviguer vers la page d'édition ou afficher une boîte de dialogue } Future _handleDelete(AmicaleModel amicale) async { // Afficher une confirmation puis supprimer final amicaleRepository = Provider.of(context, listen: false); await amicaleRepository.deleteAmicale(amicale.id); // Recharger la liste setState(() { _amicales = amicaleRepository.getAllAmicales(); }); } ``` ## Exemple complet Un exemple complet d'utilisation est disponible dans le fichier `app/lib/presentation/widgets/examples/amicale_table_example.dart`. ## Personnalisation ### Styles Les widgets utilisent les styles du thème de l'application pour la cohérence visuelle. Vous pouvez personnaliser l'apparence en modifiant le thème ou en surchargeant les styles dans votre implémentation. ### Colonnes et flexibilité Les colonnes du tableau ont des valeurs de flex prédéfinies pour une mise en page optimale : - ID : flex 1 - Nom : flex 4 - Code Postal : flex 2 - Région : flex 3 - Actions : flex 2 Vous pouvez ajuster ces valeurs en modifiant le code source si nécessaire. ## Bonnes pratiques 1. **Gestion des erreurs** : Ajoutez toujours une gestion des erreurs lors de l'interaction avec le repository. 2. **Confirmation des actions** : Demandez toujours une confirmation avant de supprimer une amicale. 3. **Actualisation des données** : Prévoyez un moyen de rafraîchir les données (bouton ou pull-to-refresh). 4. **Pagination** : Pour les grandes listes, envisagez d'implémenter une pagination.