import 'package:flutter/material.dart'; /// Mixin réutilisable pour gérer le mode sélection multiple /// Utilisable dans equipment_management_page, container_management_page, etc. mixin SelectionModeMixin on State { // État du mode sélection bool _isSelectionMode = false; final Set _selectedIds = {}; // Getters bool get isSelectionMode => _isSelectionMode; Set get selectedIds => _selectedIds; int get selectedCount => _selectedIds.length; bool get hasSelection => _selectedIds.isNotEmpty; /// Active/désactive le mode sélection void toggleSelectionMode() { setState(() { _isSelectionMode = !_isSelectionMode; if (!_isSelectionMode) { _selectedIds.clear(); } }); } /// Active le mode sélection void enableSelectionMode() { if (!_isSelectionMode) { setState(() { _isSelectionMode = true; }); } } /// Désactive le mode sélection et efface la sélection void disableSelectionMode() { if (_isSelectionMode) { setState(() { _isSelectionMode = false; _selectedIds.clear(); }); } } /// Toggle la sélection d'un item void toggleItemSelection(String id) { setState(() { if (_selectedIds.contains(id)) { _selectedIds.remove(id); } else { _selectedIds.add(id); } }); } /// Sélectionne un item void selectItem(String id) { setState(() { _selectedIds.add(id); }); } /// Désélectionne un item void deselectItem(String id) { setState(() { _selectedIds.remove(id); }); } /// Vérifie si un item est sélectionné bool isItemSelected(String id) { return _selectedIds.contains(id); } /// Sélectionne tous les items void selectAll(List ids) { setState(() { _selectedIds.addAll(ids); }); } /// Efface la sélection void clearSelection() { setState(() { _selectedIds.clear(); }); } /// Sélectionne/désélectionne tous les items void toggleSelectAll(List ids) { setState(() { if (_selectedIds.length == ids.length) { // Tout est sélectionné, on désélectionne tout _selectedIds.clear(); } else { // Sélectionner tout _selectedIds.addAll(ids); } }); } /// Widget pour afficher le nombre d'éléments sélectionnés Widget buildSelectionCounter({ required Color backgroundColor, required Color textColor, String? customText, }) { return Container( padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6), decoration: BoxDecoration( color: backgroundColor, borderRadius: BorderRadius.circular(16), ), child: Text( customText ?? '$selectedCount sélectionné${selectedCount > 1 ? 's' : ''}', style: TextStyle( color: textColor, fontWeight: FontWeight.bold, ), ), ); } /// AppBar pour le mode sélection PreferredSizeWidget buildSelectionAppBar({ required String title, required List actions, Color? backgroundColor, }) { return AppBar( backgroundColor: backgroundColor, leading: IconButton( icon: const Icon(Icons.close, color: Colors.white), onPressed: disableSelectionMode, ), title: Text( '$selectedCount $title sélectionné${selectedCount > 1 ? 's' : ''}', style: const TextStyle(color: Colors.white), ), actions: actions, ); } }