import 'package:flutter/material.dart'; import 'package:geosector_app/core/constants/app_keys.dart'; import 'package:geosector_app/core/data/models/membre_model.dart'; import 'package:geosector_app/presentation/widgets/membre_table_widget.dart'; import 'package:hive_flutter/hive_flutter.dart'; /// Exemple d'utilisation du widget MembreTableWidget /// /// Ce widget montre comment intégrer le tableau de membres dans une page /// et comment gérer les événements d'édition et de suppression. class MembreTableExample extends StatefulWidget { const MembreTableExample({Key? key}) : super(key: key); @override State createState() => _MembreTableExampleState(); } class _MembreTableExampleState extends State { List _membres = []; bool _isLoading = true; @override void initState() { super.initState(); _loadMembres(); } Future _loadMembres() async { setState(() { _isLoading = true; }); try { // S'assurer que la boîte Hive est ouverte if (!Hive.isBoxOpen(AppKeys.membresBoxName)) { await Hive.openBox(AppKeys.membresBoxName); } // Récupérer les membres depuis la boîte Hive final membresBox = Hive.box(AppKeys.membresBoxName); final membres = membresBox.values.toList(); setState(() { _membres = membres; _isLoading = false; }); } catch (e) { debugPrint('Erreur lors du chargement des membres: $e'); setState(() { _isLoading = false; }); } } void _handleEdit(MembreModel membre) { // Exemple de gestion de l'événement d'édition debugPrint( 'Édition du membre: ${membre.firstName} ${membre.name} (ID: ${membre.id})'); // Ici, vous pourriez ouvrir une boîte de dialogue ou naviguer vers une page d'édition showDialog( context: context, builder: (context) => AlertDialog( title: const Text('Édition de membre'), content: Text( 'Vous avez demandé à éditer le membre ${membre.firstName} ${membre.name}'), actions: [ TextButton( onPressed: () => Navigator.of(context).pop(), child: const Text('Fermer'), ), ], ), ); } void _handleDelete(MembreModel membre) { // Exemple de gestion de l'événement de suppression debugPrint( 'Suppression du membre: ${membre.firstName} ${membre.name} (ID: ${membre.id})'); // Demander confirmation avant de supprimer showDialog( context: context, builder: (context) => AlertDialog( title: const Text('Confirmation de suppression'), content: Text( 'Êtes-vous sûr de vouloir supprimer le membre ${membre.firstName} ${membre.name} ?'), actions: [ TextButton( onPressed: () => Navigator.of(context).pop(), child: const Text('Annuler'), ), TextButton( onPressed: () async { // Fermer la boîte de dialogue Navigator.of(context).pop(); try { // Supprimer le membre de la boîte Hive final membresBox = Hive.box(AppKeys.membresBoxName); await membresBox.delete(membre.id); // Mettre à jour l'état setState(() { _membres = _membres.where((m) => m.id != membre.id).toList(); }); // Afficher un message de confirmation if (mounted) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text( 'Membre ${membre.firstName} ${membre.name} supprimé'), backgroundColor: Colors.green, ), ); } } catch (e) { debugPrint('Erreur lors de la suppression du membre: $e'); if (mounted) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text('Erreur lors de la suppression: $e'), backgroundColor: Colors.red, ), ); } } }, child: const Text('Supprimer'), style: TextButton.styleFrom(foregroundColor: Colors.red), ), ], ), ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Tableau des Membres'), actions: [ IconButton( icon: const Icon(Icons.refresh), onPressed: _loadMembres, tooltip: 'Rafraîchir', ), ], ), body: Padding( padding: const EdgeInsets.all(16.0), child: _isLoading ? const Center(child: CircularProgressIndicator()) : MembreTableWidget( membres: _membres, onEdit: _handleEdit, onDelete: _handleDelete, height: null, // Utiliser null pour que le widget prenne toute la hauteur disponible ), ), ); } }