From d62f8bd29eec35fa4f8d7a8bec252a53d533b326 Mon Sep 17 00:00:00 2001 From: Mikkel Troels Kongsted Date: Thu, 30 Jan 2025 14:52:03 +0100 Subject: [PATCH] finish shopping page --- mobile/lib/pages/cart_page.dart | 10 ++- mobile/lib/pages/finish_shopping_page.dart | 95 ++++++++++++++++++++++ mobile/lib/repos/cart.dart | 5 ++ 3 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 mobile/lib/pages/finish_shopping_page.dart diff --git a/mobile/lib/pages/cart_page.dart b/mobile/lib/pages/cart_page.dart index ae9573c..e596f42 100644 --- a/mobile/lib/pages/cart_page.dart +++ b/mobile/lib/pages/cart_page.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:mobile/pages/finish_shopping_page.dart'; import 'package:mobile/repos/cart.dart'; import 'package:mobile/widgets/primary_button.dart'; import 'package:mobile/widgets/primary_card.dart'; @@ -144,7 +145,14 @@ class CartPage extends StatelessWidget { child: Container( margin: const EdgeInsets.only(top: 10), child: PrimaryButton( - onPressed: () {}, child: const Text("Afslut indkøb")), + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => + FinishShoppingPage())); + }, + child: const Text("Afslut indkøb")), ), ), ], diff --git a/mobile/lib/pages/finish_shopping_page.dart b/mobile/lib/pages/finish_shopping_page.dart new file mode 100644 index 0000000..9d00598 --- /dev/null +++ b/mobile/lib/pages/finish_shopping_page.dart @@ -0,0 +1,95 @@ +import 'package:flutter/material.dart'; +import 'package:mobile/repos/cart.dart'; +import 'package:mobile/widgets/primary_button.dart'; +import 'package:provider/provider.dart'; + +class ReceiptItem extends StatelessWidget { + final int pricePerAmount; + final String name; + final int amount; + + const ReceiptItem( + {super.key, + required this.pricePerAmount, + required this.name, + required this.amount}); + + @override + Widget build(BuildContext context) { + return Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text(name), + Row( + children: [ + SizedBox( + width: 60, + child: Text( + "$amount stk", + textAlign: TextAlign.end, + overflow: TextOverflow.ellipsis, + )), + SizedBox( + width: 60, + child: Text( + "${pricePerAmount * amount} kr", + textAlign: TextAlign.end, + overflow: TextOverflow.ellipsis, + )) + ], + ), + ], + ); + } +} + +class FinishShoppingPage extends StatelessWidget { + const FinishShoppingPage({super.key}); + + @override + Widget build(BuildContext context) { + final CartRepo cartRepo = context.read(); + final cart = cartRepo.allCartItems(); + + return Scaffold( + body: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + IconButton( + onPressed: () { + Navigator.of(context).pop(); + }, + icon: const Icon(Icons.arrow_back)), + Container( + margin: const EdgeInsets.all(20), + child: Expanded( + child: ListView.builder( + shrinkWrap: true, + itemBuilder: (_, idx) => ReceiptItem( + pricePerAmount: cart[idx].product.price, + name: cart[idx].product.name, + amount: cart[idx].amount), + itemCount: cart.length)), + ), + Container( + margin: const EdgeInsets.all(20), + child: Expanded( + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const Text( + "Total:", + style: TextStyle(fontWeight: FontWeight.bold), + ), + Text("${cartRepo.totalPrice()} kr"), + ], + )), + ), + Center( + child: + PrimaryButton(onPressed: () {}, child: const Text("Betal"))) + ], + ), + ); + } +} diff --git a/mobile/lib/repos/cart.dart b/mobile/lib/repos/cart.dart index 615fb89..dd6b581 100644 --- a/mobile/lib/repos/cart.dart +++ b/mobile/lib/repos/cart.dart @@ -119,6 +119,11 @@ class CartRepo extends ChangeNotifier { totalItemsInCart() { return cart.fold(0, (prev, cartItem) => prev + cartItem.amount); } + + totalPrice() { + return cart.fold( + 0, (prev, cartItem) => prev + cartItem.amount * cartItem.product.price); + } } class CartItem {