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 createState() => _SellPageState(); } class _SellPageState extends State { @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.")); } }