diff --git a/em2rp/lib/views/container_management_page.dart b/em2rp/lib/views/container_management_page.dart index 61b6825..f5c07cf 100644 --- a/em2rp/lib/views/container_management_page.dart +++ b/em2rp/lib/views/container_management_page.dart @@ -473,49 +473,81 @@ class _ContainerManagementPageState extends State Future _generateQRCodesForSelected() async { if (!hasSelection) return; - // Récupérer les containers sélectionnés - final containerProvider = context.read(); - final List selectedContainers = []; - final Map> containerEquipmentMap = {}; + // Afficher un indicateur de chargement + showDialog( + context: context, + barrierDismissible: false, + builder: (context) => const Center( + child: CircularProgressIndicator(color: AppColors.rouge), + ), + ); - for (final id in selectedIds) { - final container = await containerProvider.getContainerById(id); - if (container != null) { - selectedContainers.add(container); - // Charger les équipements pour ce container - final equipment = await containerProvider.getContainerEquipment(id); - containerEquipmentMap[id] = equipment; + try { + // Récupérer les containers sélectionnés + final containerProvider = context.read(); + final List selectedContainers = []; + final Map> containerEquipmentMap = {}; + + for (final id in selectedIds) { + final container = await containerProvider.getContainerById(id); + if (container != null) { + selectedContainers.add(container); + // Charger les équipements pour ce container + final equipment = await containerProvider.getContainerEquipment(id); + containerEquipmentMap[id] = equipment; + } } - } - if (selectedContainers.isEmpty) { + // Fermer l'indicateur de chargement if (mounted) { - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar(content: Text('Aucun container trouvé')), + Navigator.of(context).pop(); + } + + if (selectedContainers.isEmpty) { + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text('Aucun container trouvé')), + ); + } + return; + } + + // Afficher le dialogue de sélection de format avec le widget générique + if (mounted) { + showDialog( + context: context, + builder: (context) => QRCodeFormatSelectorDialog( + itemList: selectedContainers, + getId: (c) => c.id, + getTitle: (c) => c.name, + getDetails: (ContainerModel c) { + final equipment = containerEquipmentMap[c.id] ?? []; + return [ + 'Contenu (${equipment.length}):', + ...equipment.take(5).map((eq) => '- ${eq.id}'), + if (equipment.length > 5) '... +${equipment.length - 5}', + ]; + }, + dialogTitle: 'Générer ${selectedContainers.length} QR Code(s)', + ), ); } - return; - } + } catch (e) { + // Fermer l'indicateur si une erreur survient + if (mounted) { + Navigator.of(context).pop(); + } - // Afficher le dialogue de sélection de format avec le widget générique - if (mounted) { - showDialog( - context: context, - builder: (context) => QRCodeFormatSelectorDialog( - itemList: selectedContainers, - getId: (c) => c.id, - getTitle: (c) => c.name, - getDetails: (ContainerModel c) { - final equipment = containerEquipmentMap[c.id] ?? []; - return [ - 'Contenu (${equipment.length}):', - ...equipment.take(5).map((eq) => '- ${eq.id}'), - if (equipment.length > 5) '... +${equipment.length - 5}', - ]; - }, - dialogTitle: 'Générer ${selectedContainers.length} QR Code(s)', - ), - ); + DebugLog.error('[ContainerManagementPage] Error generating QR codes', e); + + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('Erreur lors de la génération : ${e.toString()}'), + backgroundColor: Colors.red, + ), + ); + } } } diff --git a/em2rp/lib/views/equipment_management_page.dart b/em2rp/lib/views/equipment_management_page.dart index dbb83ae..5a2c9d8 100644 --- a/em2rp/lib/views/equipment_management_page.dart +++ b/em2rp/lib/views/equipment_management_page.dart @@ -791,39 +791,75 @@ class _EquipmentManagementPageState extends State void _generateQRCodesForSelected() async { if (!hasSelection) return; - // Récupérer les équipements sélectionnés - final provider = context.read(); - final List selectedEquipment = []; + // Afficher un indicateur de chargement + showDialog( + context: context, + barrierDismissible: false, + builder: (context) => const Center( + child: CircularProgressIndicator(color: AppColors.rouge), + ), + ); - // On doit récupérer les équipements depuis le stream - await for (final equipmentList in provider.equipmentStream.take(1)) { - for (final equipment in equipmentList) { - if (isItemSelected(equipment.id)) { - selectedEquipment.add(equipment); + try { + // Récupérer les équipements sélectionnés + final provider = context.read(); + final List selectedEquipment = []; + + // On doit récupérer les équipements depuis le stream + await for (final equipmentList in provider.equipmentStream.take(1)) { + for (final equipment in equipmentList) { + if (isItemSelected(equipment.id)) { + selectedEquipment.add(equipment); + } + } + break; + } + + // Fermer l'indicateur de chargement + if (mounted) { + Navigator.of(context).pop(); + } + + if (selectedEquipment.isEmpty) return; + + if (selectedEquipment.length == 1) { + // Un seul équipement : afficher le dialogue simple + if (mounted) { + showDialog( + context: context, + builder: (context) => QRCodeDialog.forEquipment(selectedEquipment.first), + ); + } + } else { + // Plusieurs équipements : afficher le sélecteur de format + if (mounted) { + showDialog( + context: context, + builder: (context) => QRCodeFormatSelectorDialog( + itemList: selectedEquipment, + getId: (eq) => eq.id, + getTitle: (eq) => '${eq.brand ?? ''} ${eq.model ?? ''}'.trim(), + dialogTitle: 'Générer ${selectedEquipment.length} QR Code(s)', + ), + ); } } - break; - } + } catch (e) { + // Fermer l'indicateur si une erreur survient + if (mounted) { + Navigator.of(context).pop(); + } - if (selectedEquipment.isEmpty) return; + DebugLog.error('[EquipmentManagementPage] Error generating QR codes', e); - if (selectedEquipment.length == 1) { - // Un seul équipement : afficher le dialogue simple - showDialog( - context: context, - builder: (context) => QRCodeDialog.forEquipment(selectedEquipment.first), - ); - } else { - // Plusieurs équipements : afficher le sélecteur de format - showDialog( - context: context, - builder: (context) => QRCodeFormatSelectorDialog( - itemList: selectedEquipment, - getId: (eq) => eq.id, - getTitle: (eq) => '${eq.brand ?? ''} ${eq.model ?? ''}'.trim(), - dialogTitle: 'Générer ${selectedEquipment.length} QR Code(s)', - ), - ); + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('Erreur lors de la génération : ${e.toString()}'), + backgroundColor: Colors.red, + ), + ); + } } }