fix: overflow + owner managment error

This commit is contained in:
Alzalia 2025-08-05 15:50:37 +02:00
parent 86094b5d76
commit f8f1849d9d
4 changed files with 309 additions and 281 deletions

View file

@ -3,7 +3,6 @@ import 'package:flutter/material.dart';
import 'package:logging/logging.dart';
import 'package:mobile_scanner/mobile_scanner.dart';
import 'package:seshat/domain/models/book.dart';
import 'package:seshat/domain/models/book_instance.dart';
import 'package:seshat/domain/models/owner.dart';
import 'package:seshat/utils/result.dart';
@ -12,6 +11,12 @@ class AddViewModel extends ChangeNotifier {
final _log = Logger("AddViewModel");
/*
* ====================
* =====[ OWNERS ]=====
* ====================
*/
Owner? _currentOwner;
Owner? get currentOwner => _currentOwner;
set currentOwner(Owner? owner) {
@ -19,48 +24,22 @@ class AddViewModel extends ChangeNotifier {
notifyListeners();
}
List<Owner> _owners = [];
// Owner(
// firstName: "Jean",
// lastName: "Henri",
// contact: "contact@gmail.com",
// id: 1,
// ),
// Owner(
// firstName: "Jeanette",
// lastName: "Henriette",
// contact: "contact@gmail.com",
// id: 2,
// ),
// Owner(
// firstName: "Jacques",
// lastName: "Gerard",
// contact: "contact@gmail.com",
// id: 3,
// ),
// Owner(
// firstName: "Jacquelines",
// lastName: "Geraldine",
// contact: "contact@gmail.com",
// id: 4,
// ),
// Owner(
// firstName: "Louis",
// lastName: "Valentin",
// contact: "contact@gmail.com",
// id: 5,
// ),
// Owner(
// firstName: "Louise",
// lastName: "Valentine",
// contact: "contact@gmail.com",
// id: 6,
// ),
// ];
final List<Owner> _owners = [];
List<Owner>? get owners => _owners;
Owner addOwner(String firstName, String lastName, String contact) {
_owners!.add(
if (_owners.isEmpty) {
_owners.add(
Owner(
firstName: firstName,
lastName: lastName,
contact: contact,
id: 1,
),
);
} else {
_owners.add(
Owner(
firstName: firstName,
lastName: lastName,
@ -68,6 +47,7 @@ class AddViewModel extends ChangeNotifier {
id: _owners.last.id + 1,
),
);
}
notifyListeners();
return Owner(
firstName: firstName,
@ -77,6 +57,12 @@ class AddViewModel extends ChangeNotifier {
);
}
/*
* ===================
* =====[ PRICE ]=====
* ===================
*/
bool _askPrice = true;
bool get askPrice => _askPrice;
set askPrice(bool newValue) {
@ -84,6 +70,14 @@ class AddViewModel extends ChangeNotifier {
notifyListeners();
}
/*
* =================================
* =====[ BOOKS AND INSTANCES ]=====
* =================================
*/
/// Sends an api request with a [bacorde], then gets the [Book] that was
/// either created or retrieved. Sens the [Book] back wrapped in a [Result].
Future<Result<Book>> scanBook(BarcodeCapture barcode) async {
return Result.ok(
Book(
@ -96,5 +90,8 @@ class AddViewModel extends ChangeNotifier {
);
}
// Result<BookInstance> sendBook() {};
/// Sens an api request with
// Result<BookInstance> newBookInstance() {
// };
}

View file

@ -38,6 +38,18 @@ class _AddPageState extends State<AddPage> {
MobileScanner(
controller: controller,
onDetect: (barcodes) async {
if (widget.viewModel.currentOwner == null) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
"Attention : vous devez choisir un·e propriétaire",
),
behavior: SnackBarBehavior.floating,
),
);
return;
}
void setPrice(num newPrice) async {
setState(() {
price = newPrice;
@ -68,13 +80,16 @@ class _AddPageState extends State<AddPage> {
},
),
SafeArea(
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: [
Center(
child: Card(
margin: EdgeInsets.symmetric(horizontal: 50),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
ListenableBuilder(
listenable: widget.viewModel,
@ -114,17 +129,29 @@ class _AddPageState extends State<AddPage> {
),
),
),
Expanded(child: SizedBox()),
SizedBox(height: 100),
SvgPicture.asset('assets/scan-overlay.svg'),
Expanded(child: SizedBox()),
TextButton(
],
),
),
),
SafeArea(
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Center(
child: TextButton(
style: ButtonStyle(
backgroundColor: WidgetStatePropertyAll(theme.cardColor),
),
onPressed: () =>
_formDialogBuilder(context, controller, widget.viewModel),
onPressed: () => _formDialogBuilder(
context,
controller,
widget.viewModel,
),
child: Text("Enregistrer manuellement"),
),
),
],
),
),

View file

@ -30,6 +30,7 @@ class _ConfirmationPopupState extends State<ConfirmationPopup> {
title: Text("Prix"),
content: Form(
key: _formKey,
child: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.stretch,
@ -95,6 +96,7 @@ class _ConfirmationPopupState extends State<ConfirmationPopup> {
],
),
),
),
actions: [
TextButton(
onPressed: () {

View file

@ -29,7 +29,8 @@ class _OwnerPopupState extends State<OwnerPopup> {
listenable: widget.viewModel,
builder: (context, child) => AlertDialog(
title: Center(child: Text("Propriétaire du livre")),
content: Column(
content: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: [
@ -157,6 +158,7 @@ class _OwnerPopupState extends State<OwnerPopup> {
),
],
),
),
actions: [
TextButton(