fix: flow on scan + owners managment

This commit is contained in:
Alzalia 2025-08-05 15:13:52 +02:00
parent 70146055df
commit 86094b5d76
10 changed files with 283 additions and 130 deletions

View file

@ -1,11 +1,13 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:mobile_scanner/mobile_scanner.dart';
import 'package:seshat/domain/models/book.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/add_page/widgets/confirmation_popup.dart';
import 'package:seshat/ui/core/ui/navigation_bar.dart';
import 'package:seshat/utils/result.dart';
class AddPage extends StatefulWidget {
const AddPage({super.key, required this.viewModel});
@ -36,27 +38,33 @@ class _AddPageState extends State<AddPage> {
MobileScanner(
controller: controller,
onDetect: (barcodes) async {
void setPrice(num newPrice) {
void setPrice(num newPrice) async {
setState(() {
price = newPrice;
});
}
if (widget.viewModel.askPrice) {
await _priceDialogBuilder(context, setPrice, controller);
} else {
setPrice(0);
}
Result<Book> result = await widget.viewModel.scanBook(barcodes);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
"Envoyé : ${barcodes.barcodes.first.rawValue} pour $price",
),
behavior: SnackBarBehavior.floating,
),
);
debugPrint(price.toString());
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;
}
},
),
SafeArea(
@ -128,10 +136,12 @@ class _AddPageState extends State<AddPage> {
}
}
Future<void> _priceDialogBuilder(
Future<void> _confirmationDialogBuilder(
BuildContext context,
Function(num) setPrice,
MobileScannerController controller,
AddViewModel viewModel,
Book book,
) {
controller.stop();
@ -143,7 +153,12 @@ Future<void> _priceDialogBuilder(
return showDialog(
context: context,
barrierDismissible: false,
builder: (context) => PricePopup(exitPopup: exitPopup, setPrice: setPrice),
builder: (context) => ConfirmationPopup(
exitPopup: exitPopup,
setPrice: setPrice,
viewModel: viewModel,
book: book,
),
);
}