fix: add price where needed

This commit is contained in:
Alzalia 2025-08-05 12:38:29 +02:00
parent 630eacc1e1
commit 60265b9735
3 changed files with 74 additions and 24 deletions

View file

@ -72,4 +72,11 @@ class AddViewModel extends ChangeNotifier {
id: 0, id: 0,
); );
} }
bool _askPrice = true;
bool get askPrice => _askPrice;
set askPrice(bool newValue) {
_askPrice = newValue;
notifyListeners();
}
} }

View file

@ -16,7 +16,6 @@ class AddPage extends StatefulWidget {
} }
class _AddPageState extends State<AddPage> { class _AddPageState extends State<AddPage> {
bool askPrice = true;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final MobileScannerController controller = MobileScannerController( final MobileScannerController controller = MobileScannerController(
@ -69,13 +68,14 @@ class _AddPageState extends State<AddPage> {
leading: Icon(Icons.attach_money), leading: Icon(Icons.attach_money),
title: TextButton( title: TextButton(
child: Text( child: Text(
(askPrice) (widget.viewModel.askPrice)
? "Demander à chaque fois" ? "Demander à chaque fois"
: "Prix libre toujours", : "Prix libre toujours",
), ),
onPressed: () { onPressed: () {
setState(() { setState(() {
askPrice = !askPrice; widget.viewModel.askPrice =
!widget.viewModel.askPrice;
}); });
}, },
), ),

View file

@ -29,7 +29,10 @@ class FormPopup extends StatelessWidget {
context: context, context: context,
barrierDismissible: false, barrierDismissible: false,
builder: (context) { builder: (context) {
return _ManualEANPopup(exitPopup: exitPopup); return _ManualEANPopup(
exitPopup: exitPopup,
viewModel: viewModel,
);
}, },
); );
}, },
@ -60,7 +63,10 @@ class FormPopup extends StatelessWidget {
context: context, context: context,
barrierDismissible: false, barrierDismissible: false,
builder: (context) { builder: (context) {
return _FullyManual(exitPopup: exitPopup); return _FullyManual(
exitPopup: exitPopup,
viewModel: viewModel,
);
}, },
); );
}, },
@ -90,9 +96,10 @@ class FormPopup extends StatelessWidget {
} }
class _ManualEANPopup extends StatefulWidget { class _ManualEANPopup extends StatefulWidget {
const _ManualEANPopup({required this.exitPopup}); const _ManualEANPopup({required this.exitPopup, required this.viewModel});
final Function(BuildContext) exitPopup; final Function(BuildContext) exitPopup;
final AddViewModel viewModel;
@override @override
State<_ManualEANPopup> createState() => _ManualEANPopupState(); State<_ManualEANPopup> createState() => _ManualEANPopupState();
@ -101,6 +108,7 @@ class _ManualEANPopup extends StatefulWidget {
class _ManualEANPopupState extends State<_ManualEANPopup> { class _ManualEANPopupState extends State<_ManualEANPopup> {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
String? ean; String? ean;
num? price;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return AlertDialog( return AlertDialog(
@ -128,6 +136,33 @@ class _ManualEANPopupState extends State<_ManualEANPopup> {
return null; 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 { class _FullyManual extends StatefulWidget {
const _FullyManual({required this.exitPopup}); const _FullyManual({required this.exitPopup, required this.viewModel});
final Function(BuildContext) exitPopup; final Function(BuildContext) exitPopup;
final AddViewModel viewModel;
@override @override
State<_FullyManual> createState() => _FullyManualState(); State<_FullyManual> createState() => _FullyManualState();
@ -229,23 +265,30 @@ class _FullyManualState extends State<_FullyManual> {
}, },
), ),
SizedBox(height: 10), SizedBox(height: 10),
TextFormField( ListenableBuilder(
decoration: InputDecoration( listenable: widget.viewModel,
labelText: "Prix", builder: (context, child) {
border: OutlineInputBorder(), return (widget.viewModel.askPrice)
suffixText: "", ? TextFormField(
), decoration: InputDecoration(
keyboardType: TextInputType.number, labelText: "Prix",
validator: (value) { border: OutlineInputBorder(),
if (value == null || value.isEmpty) { suffixText: "",
return "Indiquez un prix"; ),
} else if (num.tryParse(value) == null) { keyboardType: TextInputType.number,
return "Le prix doit être un nombre"; validator: (value) {
} if (value == null || value.isEmpty) {
return null; return "Indiquez un prix";
}, } else if (num.tryParse(value) == null) {
onSaved: (newValue) { return "Le prix doit être un nombre";
price = num.parse(newValue!); }
return null;
},
onSaved: (newValue) {
price = num.parse(newValue!);
},
)
: SizedBox();
}, },
), ),
], ],