153 lines
4.7 KiB
Dart
153 lines
4.7 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_svg/svg.dart';
|
|
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/core/ui/navigation_bar.dart';
|
|
|
|
class AddPage extends StatefulWidget {
|
|
const AddPage({super.key, required this.viewModel});
|
|
|
|
final AddViewModel viewModel;
|
|
|
|
@override
|
|
State<AddPage> createState() => _AddPageState();
|
|
}
|
|
|
|
class _AddPageState extends State<AddPage> {
|
|
bool askPrice = true;
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final MobileScannerController controller = MobileScannerController(
|
|
formats: [BarcodeFormat.ean13],
|
|
detectionTimeoutMs: 1000,
|
|
);
|
|
|
|
final theme = Theme.of(context);
|
|
// return Consumer<TabScreen>(
|
|
// builder: (context, screen, child) {
|
|
return Scaffold(
|
|
bottomNavigationBar: AppNavigationBar(startIndex: 1),
|
|
body: Stack(
|
|
children: [
|
|
ColoredBox(color: Colors.black),
|
|
MobileScanner(
|
|
controller: controller,
|
|
onDetect: (barcodes) {
|
|
onBarcodeScan(barcodes, controller);
|
|
},
|
|
),
|
|
SafeArea(
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
children: [
|
|
Center(
|
|
child: Card(
|
|
margin: EdgeInsets.symmetric(horizontal: 50),
|
|
child: Column(
|
|
children: [
|
|
ListenableBuilder(
|
|
listenable: widget.viewModel,
|
|
builder: (context, child) => ListTile(
|
|
leading: Icon(Icons.person),
|
|
title: TextButton(
|
|
child: Text(
|
|
(widget.viewModel.currentOwner == null)
|
|
? "Aucun"
|
|
: "${widget.viewModel.currentOwner!.firstName} ${widget.viewModel.currentOwner!.lastName}",
|
|
),
|
|
onPressed: () => _ownerDialogBuilder(
|
|
context,
|
|
controller,
|
|
widget.viewModel,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
ListTile(
|
|
leading: Icon(Icons.attach_money),
|
|
title: TextButton(
|
|
child: Text(
|
|
(askPrice)
|
|
? "Demander à chaque fois"
|
|
: "Prix libre toujours",
|
|
),
|
|
onPressed: () {
|
|
setState(() {
|
|
askPrice = !askPrice;
|
|
});
|
|
},
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
Expanded(child: SizedBox()),
|
|
SvgPicture.asset('assets/scan-overlay.svg'),
|
|
Expanded(child: SizedBox()),
|
|
TextButton(
|
|
style: ButtonStyle(
|
|
backgroundColor: WidgetStatePropertyAll(theme.cardColor),
|
|
),
|
|
onPressed: () =>
|
|
_formDialogBuilder(context, controller, widget.viewModel),
|
|
child: Text("Enregistrer manuellement"),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
// },
|
|
// );
|
|
}
|
|
}
|
|
|
|
void onBarcodeScan(
|
|
BarcodeCapture barcodes,
|
|
MobileScannerController controller,
|
|
) {
|
|
return;
|
|
}
|
|
|
|
Future<void> _formDialogBuilder(
|
|
BuildContext context,
|
|
MobileScannerController controller,
|
|
AddViewModel viewModel,
|
|
) {
|
|
controller.stop();
|
|
|
|
void exitPopup(BuildContext localContext) {
|
|
Navigator.of(localContext).pop();
|
|
controller.start();
|
|
}
|
|
|
|
return showDialog(
|
|
context: context,
|
|
barrierDismissible: false,
|
|
builder: (context) => FormPopup(viewModel: viewModel, exitPopup: exitPopup),
|
|
);
|
|
}
|
|
|
|
Future<void> _ownerDialogBuilder(
|
|
BuildContext context,
|
|
MobileScannerController controller,
|
|
AddViewModel viewModel,
|
|
) {
|
|
controller.stop();
|
|
|
|
void onPressAccept(BuildContext localContext) {
|
|
Navigator.of(localContext).pop();
|
|
controller.start();
|
|
}
|
|
|
|
return showDialog(
|
|
context: context,
|
|
barrierDismissible: false,
|
|
builder: (context) =>
|
|
OwnerPopup(viewModel: viewModel, onPressAccept: onPressAccept),
|
|
);
|
|
}
|