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:
@@ -473,6 +473,16 @@ class _ContainerManagementPageState extends State<ContainerManagementPage>
|
|||||||
Future<void> _generateQRCodesForSelected() async {
|
Future<void> _generateQRCodesForSelected() async {
|
||||||
if (!hasSelection) return;
|
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
|
// Récupérer les containers sélectionnés
|
||||||
final containerProvider = context.read<ContainerProvider>();
|
final containerProvider = context.read<ContainerProvider>();
|
||||||
final List<ContainerModel> selectedContainers = [];
|
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 (selectedContainers.isEmpty) {
|
||||||
if (mounted) {
|
if (mounted) {
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
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 {
|
Future<void> _deleteContainer(ContainerModel container) async {
|
||||||
|
|||||||
@@ -791,6 +791,16 @@ class _EquipmentManagementPageState extends State<EquipmentManagementPage>
|
|||||||
void _generateQRCodesForSelected() async {
|
void _generateQRCodesForSelected() async {
|
||||||
if (!hasSelection) return;
|
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
|
// Récupérer les équipements sélectionnés
|
||||||
final provider = context.read<EquipmentProvider>();
|
final provider = context.read<EquipmentProvider>();
|
||||||
final List<EquipmentModel> selectedEquipment = [];
|
final List<EquipmentModel> selectedEquipment = [];
|
||||||
@@ -805,16 +815,24 @@ class _EquipmentManagementPageState extends State<EquipmentManagementPage>
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fermer l'indicateur de chargement
|
||||||
|
if (mounted) {
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
}
|
||||||
|
|
||||||
if (selectedEquipment.isEmpty) return;
|
if (selectedEquipment.isEmpty) return;
|
||||||
|
|
||||||
if (selectedEquipment.length == 1) {
|
if (selectedEquipment.length == 1) {
|
||||||
// Un seul équipement : afficher le dialogue simple
|
// Un seul équipement : afficher le dialogue simple
|
||||||
|
if (mounted) {
|
||||||
showDialog(
|
showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) => QRCodeDialog.forEquipment(selectedEquipment.first),
|
builder: (context) => QRCodeDialog.forEquipment(selectedEquipment.first),
|
||||||
);
|
);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// Plusieurs équipements : afficher le sélecteur de format
|
// Plusieurs équipements : afficher le sélecteur de format
|
||||||
|
if (mounted) {
|
||||||
showDialog(
|
showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) => QRCodeFormatSelectorDialog<EquipmentModel>(
|
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) {
|
void _showRestockDialog(EquipmentModel equipment) {
|
||||||
final TextEditingController quantityController = TextEditingController();
|
final TextEditingController quantityController = TextEditingController();
|
||||||
|
|||||||
Reference in New Issue
Block a user