diff --git a/lib/ui/add_page/widgets/add_page.dart b/lib/ui/add_page/widgets/add_page.dart index b1a0144..c009ab4 100644 --- a/lib/ui/add_page/widgets/add_page.dart +++ b/lib/ui/add_page/widgets/add_page.dart @@ -4,6 +4,7 @@ import 'package:mobile_scanner/mobile_scanner.dart'; import 'package:seshat/ui/add_page/view_model/add_view_model.dart'; import 'package:seshat/ui/add_page/widgets/form_popup.dart'; import 'package:seshat/ui/add_page/widgets/owner_popup.dart'; +import 'package:seshat/ui/add_page/widgets/price_popup.dart'; import 'package:seshat/ui/core/ui/navigation_bar.dart'; class AddPage extends StatefulWidget { @@ -16,6 +17,7 @@ class AddPage extends StatefulWidget { } class _AddPageState extends State { + num? price; @override Widget build(BuildContext context) { final MobileScannerController controller = MobileScannerController( @@ -33,8 +35,28 @@ class _AddPageState extends State { ColoredBox(color: Colors.black), MobileScanner( controller: controller, - onDetect: (barcodes) { - onBarcodeScan(barcodes, controller); + onDetect: (barcodes) async { + void setPrice(num newPrice) { + setState(() { + price = newPrice; + }); + } + + if (widget.viewModel.askPrice) { + await _priceDialogBuilder(context, setPrice, controller); + } else { + setPrice(0); + } + + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text( + "Envoyé : ${barcodes.barcodes.first.rawValue} pour $price€", + ), + behavior: SnackBarBehavior.floating, + ), + ); + debugPrint(price.toString()); }, ), SafeArea( @@ -106,11 +128,23 @@ class _AddPageState extends State { } } -void onBarcodeScan( - BarcodeCapture barcodes, +Future _priceDialogBuilder( + BuildContext context, + Function(num) setPrice, MobileScannerController controller, ) { - return; + controller.stop(); + + void exitPopup(BuildContext localContext) { + Navigator.of(localContext).pop(); + controller.start(); + } + + return showDialog( + context: context, + barrierDismissible: false, + builder: (context) => PricePopup(exitPopup: exitPopup, setPrice: setPrice), + ); } Future _formDialogBuilder( diff --git a/lib/ui/add_page/widgets/price_popup.dart b/lib/ui/add_page/widgets/price_popup.dart new file mode 100644 index 0000000..bec698f --- /dev/null +++ b/lib/ui/add_page/widgets/price_popup.dart @@ -0,0 +1,65 @@ +import 'package:flutter/material.dart'; + +class PricePopup extends StatefulWidget { + const PricePopup({ + super.key, + required this.exitPopup, + required this.setPrice, + }); + + final Function(BuildContext) exitPopup; + final Function(num) setPrice; + + @override + State createState() => _PricePopupState(); +} + +class _PricePopupState extends State { + final GlobalKey _formKey = GlobalKey(); + num? price; + @override + Widget build(BuildContext context) { + return AlertDialog( + title: Text("Prix"), + content: Form( + key: _formKey, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + TextFormField( + decoration: InputDecoration( + labelText: "Prix", + border: OutlineInputBorder(), + suffixText: "€", + ), + keyboardType: TextInputType.number, + validator: (value) { + if (value == null || value.isEmpty) { + return "Indiquez un prix"; + } else if (num.tryParse(value) == null) { + return "Le prix doit être un nombre"; + } + return null; + }, + onSaved: (newValue) { + price = num.parse(newValue!); + }, + ), + ], + ), + ), + actions: [ + TextButton( + onPressed: () { + if (_formKey.currentState!.validate()) { + _formKey.currentState!.save(); + widget.setPrice(price!); + widget.exitPopup(context); + } + }, + child: Text("Valider"), + ), + ], + ); + } +}