import 'package:flutter/material.dart'; import 'package:mobile/controllers/routing.dart'; import 'package:mobile/controllers/cart.dart'; import 'package:mobile/controllers/paying_state.dart'; import 'package:mobile/controllers/receipt.dart'; import 'package:mobile/results.dart'; import 'package:mobile/utils/price.dart'; import 'package:mobile/widgets/primary_button.dart'; import 'package:mobile/widgets/receipt_item.dart'; import 'package:provider/provider.dart'; class FinishShoppingPage extends StatelessWidget { const FinishShoppingPage({super.key}); @override Widget build(BuildContext context) { final CartControllerCache cartController = context.read(); final ReceiptController receiptRepo = context.read(); final PayingStateController payingStateRepo = context.watch(); final cart = cartController.allCartItems(); return Scaffold( body: SafeArea( child: Stack( children: [ Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const BackButton(), Container( margin: const EdgeInsets.all(20), child: ListView.builder( shrinkWrap: true, itemBuilder: (_, idx) => ReceiptItemView( pricePerAmount: cart[idx].product.priceDkkCent, name: cart[idx].product.name, amount: cart[idx].amount), itemCount: cart.length), ), Container( margin: const EdgeInsets.all(20), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ const Text( "Total:", style: TextStyle(fontWeight: FontWeight.bold), ), Text(formatDkkCents(cartController.totalPrice())), ], ), ), Expanded( child: Center( child: PrimaryButton( onPressed: () async { payingStateRepo.next(); await Future.delayed(const Duration(seconds: 1)); // TODO: implement paying for user if (cartController.pay() is Err) { if (context.mounted) { showDialog( context: context, builder: (BuildContext context) => AlertDialog( content: const Text( 'Du har desværre ikke råd til at købe dette'), actions: [ TextButton( onPressed: () => Navigator.pop(context, 'OK'), child: const Text('OK'), ), ], ), ); } payingStateRepo.reset(); return; } receiptRepo.createReceipt(cart); payingStateRepo.next(); await Future.delayed(const Duration(seconds: 1)); cartController.clearCart(); payingStateRepo.reset(); if (context.mounted) { Navigator.pop(context); final RoutingController routing = context.read(); routing.routeTo(PageSelector.homePage); } }, child: const Text("Betal"))), ), ], ), if (payingStateRepo.state != PayingState.unset) ...[ Container( color: Colors.black.withValues(alpha: 0.5), ), ], Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ ...switch (payingStateRepo.state) { PayingState.unset => [], PayingState.loading => [ Container( decoration: const BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(10)), color: Colors.white, ), padding: const EdgeInsets.all(20), child: SizedBox( width: 50, height: 50, child: CircularProgressIndicator( valueColor: AlwaysStoppedAnimation( Theme.of(context).primaryColor), strokeWidth: 6.0, ), ), ), ], PayingState.done => [ Container( padding: const EdgeInsets.all(10), decoration: const BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(10)), color: Colors.white, ), child: Icon( Icons.check_rounded, color: Theme.of(context).primaryColor, size: 70, ), ) ] }, ], ), ) ], ), ), ); } }