fix: some error managment and a whole feature missing
This commit is contained in:
parent
dad000a1b9
commit
6bcc3a7e88
5 changed files with 192 additions and 140 deletions
|
|
@ -22,23 +22,20 @@ class AddPage extends StatefulWidget {
|
|||
}
|
||||
|
||||
class _AddPageState extends State<AddPage> {
|
||||
num? price;
|
||||
final MobileScannerController controller = MobileScannerController(
|
||||
final MobileScannerController scannerController = MobileScannerController(
|
||||
formats: [BarcodeFormat.ean13],
|
||||
detectionTimeoutMs: 1000,
|
||||
);
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
controller.dispose();
|
||||
scannerController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final theme = Theme.of(context);
|
||||
// return Consumer<TabScreen>(
|
||||
// builder: (context, screen, child) {
|
||||
return Scaffold(
|
||||
bottomNavigationBar: AppNavigationBar(startIndex: 1),
|
||||
body: ListenableBuilder(
|
||||
|
|
@ -78,60 +75,37 @@ class _AddPageState extends State<AddPage> {
|
|||
children: [
|
||||
ColoredBox(color: Colors.black),
|
||||
MobileScanner(
|
||||
controller: controller,
|
||||
controller: scannerController,
|
||||
onDetect: (barcodes) async {
|
||||
if (barcodes.barcodes.isEmpty) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (widget.viewModel.currentOwner == null) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(
|
||||
"Attention : vous devez choisir un·e propriétaire",
|
||||
),
|
||||
behavior: SnackBarBehavior.floating,
|
||||
),
|
||||
_showMissingOwnerSnackBar(
|
||||
context,
|
||||
scannerController,
|
||||
widget.viewModel,
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
void setPrice(num newPrice) async {
|
||||
setState(() {
|
||||
price = newPrice;
|
||||
});
|
||||
}
|
||||
|
||||
Result<Book> result = await widget.viewModel.scanBook(
|
||||
barcodes,
|
||||
_scanEan(
|
||||
context,
|
||||
widget.viewModel,
|
||||
barcodes.barcodes.first.rawValue!,
|
||||
scannerController,
|
||||
);
|
||||
|
||||
switch (result) {
|
||||
case Ok():
|
||||
await _confirmationDialogBuilder(
|
||||
context,
|
||||
setPrice,
|
||||
controller,
|
||||
widget.viewModel,
|
||||
result.value,
|
||||
);
|
||||
break;
|
||||
case Error():
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text("Erreur : ${result.error}"),
|
||||
behavior: SnackBarBehavior.floating,
|
||||
),
|
||||
);
|
||||
break;
|
||||
}
|
||||
},
|
||||
),
|
||||
|
||||
Center(
|
||||
child: SvgPicture.asset(
|
||||
'assets/scan-overlay.svg',
|
||||
height: (MediaQuery.sizeOf(context).height / 5) * 2,
|
||||
),
|
||||
),
|
||||
|
||||
SafeArea(
|
||||
child: SingleChildScrollView(
|
||||
child: Column(
|
||||
|
|
@ -155,7 +129,7 @@ class _AddPageState extends State<AddPage> {
|
|||
),
|
||||
onPressed: () => _ownerDialogBuilder(
|
||||
context,
|
||||
controller,
|
||||
scannerController,
|
||||
widget.viewModel,
|
||||
),
|
||||
),
|
||||
|
|
@ -184,6 +158,7 @@ class _AddPageState extends State<AddPage> {
|
|||
),
|
||||
),
|
||||
),
|
||||
|
||||
SafeArea(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
|
|
@ -197,19 +172,17 @@ class _AddPageState extends State<AddPage> {
|
|||
),
|
||||
onPressed: () {
|
||||
if (widget.viewModel.currentOwner == null) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(
|
||||
"Attention : vous devez choisir un·e propriétaire",
|
||||
),
|
||||
behavior: SnackBarBehavior.floating,
|
||||
),
|
||||
_showMissingOwnerSnackBar(
|
||||
context,
|
||||
scannerController,
|
||||
widget.viewModel,
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
_formDialogBuilder(
|
||||
context,
|
||||
controller,
|
||||
scannerController,
|
||||
widget.viewModel,
|
||||
);
|
||||
},
|
||||
|
|
@ -231,18 +204,71 @@ class _AddPageState extends State<AddPage> {
|
|||
}
|
||||
}
|
||||
|
||||
void _scanEan(
|
||||
BuildContext context,
|
||||
AddViewModel viewModel,
|
||||
String ean,
|
||||
MobileScannerController scannerController, {
|
||||
Function(BuildContext)? leaveLastPopup,
|
||||
}) async {
|
||||
Result<Book> result = await viewModel.scanBook(ean);
|
||||
|
||||
if (context.mounted) {
|
||||
if (leaveLastPopup != null) {
|
||||
leaveLastPopup(context);
|
||||
}
|
||||
switch (result) {
|
||||
case Ok():
|
||||
await _confirmationDialogBuilder(
|
||||
context,
|
||||
scannerController,
|
||||
viewModel,
|
||||
result.value,
|
||||
);
|
||||
break;
|
||||
case Error():
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text("Erreur : ${result.error}"),
|
||||
behavior: SnackBarBehavior.floating,
|
||||
),
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void _showMissingOwnerSnackBar(
|
||||
BuildContext context,
|
||||
MobileScannerController scannerController,
|
||||
AddViewModel viewModel,
|
||||
) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text("Attention : vous devez choisir un·e propriétaire"),
|
||||
duration: Duration(seconds: 4),
|
||||
action: SnackBarAction(
|
||||
label: "Choisir",
|
||||
onPressed: () =>
|
||||
_ownerDialogBuilder(context, scannerController, viewModel),
|
||||
),
|
||||
behavior: SnackBarBehavior.floating,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> _confirmationDialogBuilder(
|
||||
BuildContext context,
|
||||
Function(num) setPrice,
|
||||
MobileScannerController controller,
|
||||
MobileScannerController scannerController,
|
||||
AddViewModel viewModel,
|
||||
Book book,
|
||||
) {
|
||||
controller.stop();
|
||||
scannerController.stop();
|
||||
|
||||
// Utility function to pass to downwards widgets
|
||||
void exitPopup(BuildContext localContext) {
|
||||
Navigator.of(localContext).pop();
|
||||
controller.start();
|
||||
scannerController.start();
|
||||
}
|
||||
|
||||
return showDialog(
|
||||
|
|
@ -250,7 +276,6 @@ Future<void> _confirmationDialogBuilder(
|
|||
barrierDismissible: false,
|
||||
builder: (context) => ConfirmationPopup(
|
||||
exitPopup: exitPopup,
|
||||
setPrice: setPrice,
|
||||
viewModel: viewModel,
|
||||
book: book,
|
||||
),
|
||||
|
|
@ -264,6 +289,7 @@ Future<void> _formDialogBuilder(
|
|||
) {
|
||||
controller.stop();
|
||||
|
||||
// Utility function to pass to downwards widgets
|
||||
void exitPopup(BuildContext localContext) {
|
||||
Navigator.of(localContext).pop();
|
||||
controller.start();
|
||||
|
|
@ -272,7 +298,12 @@ Future<void> _formDialogBuilder(
|
|||
return showDialog(
|
||||
context: context,
|
||||
barrierDismissible: false,
|
||||
builder: (context) => FormPopup(viewModel: viewModel, exitPopup: exitPopup),
|
||||
builder: (context) => FormPopup(
|
||||
viewModel: viewModel,
|
||||
exitPopup: exitPopup,
|
||||
scannerController: controller,
|
||||
scanEan: _scanEan,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -283,7 +314,8 @@ Future<void> _ownerDialogBuilder(
|
|||
) {
|
||||
controller.stop();
|
||||
|
||||
void onPressAccept(BuildContext localContext) {
|
||||
// Utility function to pass to downwards widgets
|
||||
void exitPopup(BuildContext localContext) {
|
||||
Navigator.of(localContext).pop();
|
||||
controller.start();
|
||||
}
|
||||
|
|
@ -292,6 +324,6 @@ Future<void> _ownerDialogBuilder(
|
|||
context: context,
|
||||
barrierDismissible: false,
|
||||
builder: (context) =>
|
||||
OwnerPopup(viewModel: viewModel, onPressAccept: onPressAccept),
|
||||
OwnerPopup(viewModel: viewModel, exitPopup: exitPopup),
|
||||
);
|
||||
}
|
||||
|
|
|
|||
Reference in a new issue