fix: Amélioration de l'expérience utilisateur lors de la génération de QR codes
Cette mise à jour améliore la génération de QR codes pour les équipements et les containers en ajoutant un retour visuel à l'utilisateur et une gestion des erreurs plus robuste. **Changements :** - **Ajout d'un indicateur de chargement :** Un `CircularProgressIndicator` est désormais affiché pendant que les données des équipements ou des containers sélectionnés sont récupérées, informant l'utilisateur qu'une opération est en cours. - **Gestion des erreurs :** Un bloc `try...catch` a été ajouté autour de la logique de génération dans les pages de gestion des équipements (`EquipmentManagementPage`) et des containers (`ContainerManagementPage`). - **Affichage des erreurs :** En cas d'échec, le chargement est stoppé et une `SnackBar` rouge apparaît pour notifier l'utilisateur de l'erreur, améliorant ainsi la robustesse de la fonctionnalité.
This commit is contained in:
@@ -791,39 +791,75 @@ class _EquipmentManagementPageState extends State<EquipmentManagementPage>
|
||||
void _generateQRCodesForSelected() async {
|
||||
if (!hasSelection) return;
|
||||
|
||||
// Récupérer les équipements sélectionnés
|
||||
final provider = context.read<EquipmentProvider>();
|
||||
final List<EquipmentModel> 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<EquipmentProvider>();
|
||||
final List<EquipmentModel> 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<EquipmentModel>(
|
||||
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<EquipmentModel>(
|
||||
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,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user