From 60265b973572fc4d3b345c52b947419bde17bb2c Mon Sep 17 00:00:00 2001 From: Alzalia Date: Tue, 5 Aug 2025 12:38:29 +0200 Subject: [PATCH] fix: add price where needed --- .../add_page/view_model/add_view_model.dart | 7 ++ lib/ui/add_page/widgets/add_page.dart | 6 +- lib/ui/add_page/widgets/form_popup.dart | 85 ++++++++++++++----- 3 files changed, 74 insertions(+), 24 deletions(-) diff --git a/lib/ui/add_page/view_model/add_view_model.dart b/lib/ui/add_page/view_model/add_view_model.dart index 6c890bc..6a96452 100644 --- a/lib/ui/add_page/view_model/add_view_model.dart +++ b/lib/ui/add_page/view_model/add_view_model.dart @@ -72,4 +72,11 @@ class AddViewModel extends ChangeNotifier { id: 0, ); } + + bool _askPrice = true; + bool get askPrice => _askPrice; + set askPrice(bool newValue) { + _askPrice = newValue; + notifyListeners(); + } } diff --git a/lib/ui/add_page/widgets/add_page.dart b/lib/ui/add_page/widgets/add_page.dart index 31022c3..b1a0144 100644 --- a/lib/ui/add_page/widgets/add_page.dart +++ b/lib/ui/add_page/widgets/add_page.dart @@ -16,7 +16,6 @@ class AddPage extends StatefulWidget { } class _AddPageState extends State { - bool askPrice = true; @override Widget build(BuildContext context) { final MobileScannerController controller = MobileScannerController( @@ -69,13 +68,14 @@ class _AddPageState extends State { leading: Icon(Icons.attach_money), title: TextButton( child: Text( - (askPrice) + (widget.viewModel.askPrice) ? "Demander à chaque fois" : "Prix libre toujours", ), onPressed: () { setState(() { - askPrice = !askPrice; + widget.viewModel.askPrice = + !widget.viewModel.askPrice; }); }, ), diff --git a/lib/ui/add_page/widgets/form_popup.dart b/lib/ui/add_page/widgets/form_popup.dart index 101fa0b..0617fd2 100644 --- a/lib/ui/add_page/widgets/form_popup.dart +++ b/lib/ui/add_page/widgets/form_popup.dart @@ -29,7 +29,10 @@ class FormPopup extends StatelessWidget { context: context, barrierDismissible: false, builder: (context) { - return _ManualEANPopup(exitPopup: exitPopup); + return _ManualEANPopup( + exitPopup: exitPopup, + viewModel: viewModel, + ); }, ); }, @@ -60,7 +63,10 @@ class FormPopup extends StatelessWidget { context: context, barrierDismissible: false, builder: (context) { - return _FullyManual(exitPopup: exitPopup); + return _FullyManual( + exitPopup: exitPopup, + viewModel: viewModel, + ); }, ); }, @@ -90,9 +96,10 @@ class FormPopup extends StatelessWidget { } class _ManualEANPopup extends StatefulWidget { - const _ManualEANPopup({required this.exitPopup}); + const _ManualEANPopup({required this.exitPopup, required this.viewModel}); final Function(BuildContext) exitPopup; + final AddViewModel viewModel; @override State<_ManualEANPopup> createState() => _ManualEANPopupState(); @@ -101,6 +108,7 @@ class _ManualEANPopup extends StatefulWidget { class _ManualEANPopupState extends State<_ManualEANPopup> { final GlobalKey _formKey = GlobalKey(); String? ean; + num? price; @override Widget build(BuildContext context) { return AlertDialog( @@ -128,6 +136,33 @@ class _ManualEANPopupState extends State<_ManualEANPopup> { return null; }, ), + SizedBox(height: 10), + ListenableBuilder( + listenable: widget.viewModel, + builder: (context, child) { + return (widget.viewModel.askPrice) + ? 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!); + }, + ) + : SizedBox(); + }, + ), ], ), ), @@ -153,9 +188,10 @@ class _ManualEANPopupState extends State<_ManualEANPopup> { } class _FullyManual extends StatefulWidget { - const _FullyManual({required this.exitPopup}); + const _FullyManual({required this.exitPopup, required this.viewModel}); final Function(BuildContext) exitPopup; + final AddViewModel viewModel; @override State<_FullyManual> createState() => _FullyManualState(); @@ -229,23 +265,30 @@ class _FullyManualState extends State<_FullyManual> { }, ), SizedBox(height: 10), - 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!); + ListenableBuilder( + listenable: widget.viewModel, + builder: (context, child) { + return (widget.viewModel.askPrice) + ? 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!); + }, + ) + : SizedBox(); }, ), ],