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:
ElPoyo
2026-01-16 00:42:16 +01:00
parent 06f394b728
commit 1ea5cea6fc
2 changed files with 132 additions and 64 deletions

View File

@@ -473,6 +473,16 @@ class _ContainerManagementPageState extends State<ContainerManagementPage>
Future<void> _generateQRCodesForSelected() async {
if (!hasSelection) return;
// Afficher un indicateur de chargement
showDialog(
context: context,
barrierDismissible: false,
builder: (context) => const Center(
child: CircularProgressIndicator(color: AppColors.rouge),
),
);
try {
// Récupérer les containers sélectionnés
final containerProvider = context.read<ContainerProvider>();
final List<ContainerModel> selectedContainers = [];
@@ -488,6 +498,11 @@ class _ContainerManagementPageState extends State<ContainerManagementPage>
}
}
// Fermer l'indicateur de chargement
if (mounted) {
Navigator.of(context).pop();
}
if (selectedContainers.isEmpty) {
if (mounted) {
ScaffoldMessenger.of(context).showSnackBar(
@@ -517,6 +532,23 @@ class _ContainerManagementPageState extends State<ContainerManagementPage>
),
);
}
} catch (e) {
// Fermer l'indicateur si une erreur survient
if (mounted) {
Navigator.of(context).pop();
}
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,
),
);
}
}
}
Future<void> _deleteContainer(ContainerModel container) async {

View File

@@ -791,6 +791,16 @@ class _EquipmentManagementPageState extends State<EquipmentManagementPage>
void _generateQRCodesForSelected() async {
if (!hasSelection) return;
// Afficher un indicateur de chargement
showDialog(
context: context,
barrierDismissible: false,
builder: (context) => const Center(
child: CircularProgressIndicator(color: AppColors.rouge),
),
);
try {
// Récupérer les équipements sélectionnés
final provider = context.read<EquipmentProvider>();
final List<EquipmentModel> selectedEquipment = [];
@@ -805,16 +815,24 @@ class _EquipmentManagementPageState extends State<EquipmentManagementPage>
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>(
@@ -826,6 +844,24 @@ class _EquipmentManagementPageState extends State<EquipmentManagementPage>
);
}
}
} catch (e) {
// Fermer l'indicateur si une erreur survient
if (mounted) {
Navigator.of(context).pop();
}
DebugLog.error('[EquipmentManagementPage] 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,
),
);
}
}
}
void _showRestockDialog(EquipmentModel equipment) {
final TextEditingController quantityController = TextEditingController();