170 lines
		
	
	
	
		
			7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			170 lines
		
	
	
	
		
			7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'package:flutter/material.dart';
 | |
| import 'package:go_router/go_router.dart';
 | |
| import 'package:seshat/domain/models/book_instance.dart';
 | |
| import 'package:seshat/routing/routes.dart';
 | |
| import 'package:seshat/ui/core/ui/navigation_bar.dart';
 | |
| import 'package:seshat/ui/sell_page/view_model/sell_view_model.dart';
 | |
| import 'package:seshat/ui/sell_page/widgets/scan_screen.dart';
 | |
| import 'package:seshat/ui/core/ui/await_loading.dart';
 | |
| 
 | |
| class SellPage extends StatefulWidget {
 | |
|   const SellPage({super.key, required this.viewModel});
 | |
| 
 | |
|   final SellViewModel viewModel;
 | |
| 
 | |
|   @override
 | |
|   State<SellPage> createState() => _SellPageState();
 | |
| }
 | |
| 
 | |
| class _SellPageState extends State<SellPage> {
 | |
|   @override
 | |
|   Widget build(BuildContext context) {
 | |
|     return Scaffold(
 | |
|       bottomNavigationBar: AppNavigationBar(startIndex: 2),
 | |
|       body: ListenableBuilder(
 | |
|         listenable: widget.viewModel,
 | |
|         builder: (context, child) {
 | |
|           return switch (widget.viewModel.isLoaded) {
 | |
|             false => AwaitLoading(),
 | |
|             true => switch (widget.viewModel.currentBal) {
 | |
|               null => Center(
 | |
|                 child: SizedBox(
 | |
|                   width: 300,
 | |
|                   child: Column(
 | |
|                     mainAxisAlignment: MainAxisAlignment.center,
 | |
|                     crossAxisAlignment: CrossAxisAlignment.center,
 | |
|                     children: [
 | |
|                       Text(
 | |
|                         "Aucune bal n'est active.",
 | |
|                         style: TextStyle(fontSize: 25),
 | |
|                         textAlign: TextAlign.center,
 | |
|                       ),
 | |
|                       SizedBox(height: 15),
 | |
|                       Text(
 | |
|                         "Vous devez créer puis activer une BAL pour pouvoir scanner des livres.",
 | |
|                         textAlign: TextAlign.center,
 | |
|                       ),
 | |
|                       SizedBox(height: 30),
 | |
|                       ElevatedButton(
 | |
|                         onPressed: () {
 | |
|                           context.go(Routes.home);
 | |
|                         },
 | |
|                         child: Text("Gérer les BALs"),
 | |
|                       ),
 | |
|                     ],
 | |
|                   ),
 | |
|                 ),
 | |
|               ),
 | |
|               _ => Stack(
 | |
|                 children: [
 | |
|                   SafeArea(
 | |
|                     child: Column(
 | |
|                       mainAxisSize: MainAxisSize.min,
 | |
|                       crossAxisAlignment: CrossAxisAlignment.center,
 | |
|                       children: [
 | |
|                         Center(
 | |
|                           child: Text(
 | |
|                             "Livres dans la vente actuelle",
 | |
|                             style: TextStyle(fontSize: 20),
 | |
|                           ),
 | |
|                         ),
 | |
|                         SizedBox(height: 15),
 | |
|                         Expanded(
 | |
|                           child: ListView(
 | |
|                             children: [
 | |
|                               (widget.viewModel.scannedBooks.isEmpty)
 | |
|                                   ? Center(child: Text("Aucun"))
 | |
|                                   : SizedBox(),
 | |
|                               for (BookInstance bookInstance
 | |
|                                   in widget.viewModel.scannedBooks)
 | |
|                                 Padding(
 | |
|                                   padding: const EdgeInsets.symmetric(
 | |
|                                     horizontal: 15,
 | |
|                                   ),
 | |
|                                   child: Card(
 | |
|                                     child: ListTile(
 | |
|                                       leading: Text(
 | |
|                                         "${bookInstance.price.toString()}€",
 | |
|                                         style: TextStyle(fontSize: 30),
 | |
|                                       ),
 | |
|                                       title: Text(
 | |
|                                         "Les chiens et la charrue · Patrick K. Dewdney ${bookInstance.id}",
 | |
|                                       ),
 | |
|                                       subtitle: Text(
 | |
|                                         "Union Étudiante Auvergne",
 | |
|                                       ),
 | |
|                                       trailing: IconButton(
 | |
|                                         onPressed: () {
 | |
|                                           widget.viewModel.deleteBook(
 | |
|                                             bookInstance.id,
 | |
|                                           );
 | |
|                                         },
 | |
|                                         icon: Icon(Icons.delete),
 | |
|                                       ),
 | |
|                                     ),
 | |
|                                   ),
 | |
|                                 ),
 | |
|                             ],
 | |
|                           ),
 | |
|                         ),
 | |
|                         SizedBox(height: 40),
 | |
|                         Text("Montant minimum à payer : 20€"),
 | |
|                         Padding(
 | |
|                           padding: const EdgeInsets.symmetric(horizontal: 60.0),
 | |
|                           child: SizedBox(
 | |
|                             child: TextField(
 | |
|                               decoration: InputDecoration(
 | |
|                                 labelText: "Argent reçu",
 | |
|                                 helperText:
 | |
|                                     "L'argent reçu sera réparti automatiquement",
 | |
|                                 suffixText: "€",
 | |
|                                 border: OutlineInputBorder(),
 | |
|                               ),
 | |
|                               keyboardType: TextInputType.number,
 | |
|                             ),
 | |
|                           ),
 | |
|                         ),
 | |
|                         SizedBox(height: 10),
 | |
|                         Row(
 | |
|                           mainAxisAlignment: MainAxisAlignment.center,
 | |
|                           children: [
 | |
|                             IconButton(
 | |
|                               onPressed: () {
 | |
|                                 widget.viewModel.sendSell();
 | |
|                               },
 | |
|                               icon: Icon(Icons.check),
 | |
|                               style: ButtonStyle(
 | |
|                                 iconSize: WidgetStatePropertyAll(70),
 | |
|                               ),
 | |
|                             ),
 | |
|                             SizedBox(width: 70),
 | |
|                             IconButton(
 | |
|                               onPressed: () {
 | |
|                                 widget.viewModel.showScan = true;
 | |
|                               },
 | |
|                               icon: Icon(Icons.add),
 | |
|                               style: ButtonStyle(
 | |
|                                 iconSize: WidgetStatePropertyAll(70),
 | |
|                                 elevation: WidgetStatePropertyAll(50),
 | |
|                               ),
 | |
|                             ),
 | |
|                           ],
 | |
|                         ),
 | |
|                         SizedBox(height: 5),
 | |
|                       ],
 | |
|                     ),
 | |
|                   ),
 | |
| 
 | |
|                   (widget.viewModel.showScan)
 | |
|                       ? ScanScreen(viewModel: widget.viewModel)
 | |
|                       : SizedBox(),
 | |
|                 ],
 | |
|               ),
 | |
|             },
 | |
|           };
 | |
|         },
 | |
|       ),
 | |
|     );
 | |
|     // return Center(child: Text("Sell page."));
 | |
|   }
 | |
| }
 | 
