From ddedaada312068aa5aaf89513fa9a04d776c14a1 Mon Sep 17 00:00:00 2001 From: Mikkel Troels Kongsted Date: Mon, 3 Feb 2025 12:09:28 +0100 Subject: [PATCH] receipt page --- mobile/lib/pages/all_receipts_page.dart | 19 ++++++++--- mobile/lib/pages/finish_shopping_page.dart | 6 +--- mobile/lib/pages/receipt_page.dart | 37 ++++++++++++++++++++++ mobile/lib/repos/receipt.dart | 4 +++ 4 files changed, 56 insertions(+), 10 deletions(-) create mode 100644 mobile/lib/pages/receipt_page.dart diff --git a/mobile/lib/pages/all_receipts_page.dart b/mobile/lib/pages/all_receipts_page.dart index f697189..1829cd7 100644 --- a/mobile/lib/pages/all_receipts_page.dart +++ b/mobile/lib/pages/all_receipts_page.dart @@ -1,19 +1,27 @@ import 'package:flutter/material.dart'; +import 'package:mobile/pages/receipt_page.dart'; import 'package:mobile/repos/receipt.dart'; import 'package:provider/provider.dart'; class ReceiptsListItem extends StatelessWidget { final String dateFormatted; final int totalPrice; + final ReceiptPage receiptPage; const ReceiptsListItem( - {super.key, required this.dateFormatted, required this.totalPrice}); + {super.key, + required this.dateFormatted, + required this.totalPrice, + required this.receiptPage}); @override Widget build(BuildContext context) { return Card( child: InkWell( borderRadius: const BorderRadius.all(Radius.circular(10)), - onTap: () {}, + onTap: () { + Navigator.of(context) + .push(MaterialPageRoute(builder: (context) => receiptPage)); + }, child: Container( padding: const EdgeInsets.all(20), child: Row( @@ -34,14 +42,15 @@ class AllReceiptsPage extends StatelessWidget { return Column( children: [ Expanded(child: Consumer( - builder: (_, cartRepo, __) { - final allReceipts = cartRepo.allReceipts(); + builder: (_, receiptRepo, __) { + final allReceipts = receiptRepo.allReceipts(); return ListView.builder( shrinkWrap: true, itemBuilder: (_, idx) { return ReceiptsListItem( dateFormatted: allReceipts[idx].dateFormatted(), - totalPrice: allReceipts[idx].totalPrice()); + totalPrice: allReceipts[idx].totalPrice(), + receiptPage: ReceiptPage(receipt: allReceipts[idx])); }, itemCount: allReceipts.length, ); diff --git a/mobile/lib/pages/finish_shopping_page.dart b/mobile/lib/pages/finish_shopping_page.dart index df84cc1..2ee9bb5 100644 --- a/mobile/lib/pages/finish_shopping_page.dart +++ b/mobile/lib/pages/finish_shopping_page.dart @@ -16,11 +16,7 @@ class FinishShoppingPage extends StatelessWidget { body: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - IconButton( - onPressed: () { - Navigator.of(context).pop(); - }, - icon: const Icon(Icons.arrow_back)), + const BackButton(), Container( margin: const EdgeInsets.all(20), child: Expanded( diff --git a/mobile/lib/pages/receipt_page.dart b/mobile/lib/pages/receipt_page.dart new file mode 100644 index 0000000..82f7914 --- /dev/null +++ b/mobile/lib/pages/receipt_page.dart @@ -0,0 +1,37 @@ +import 'package:flutter/material.dart'; +import 'package:mobile/repos/receipt.dart'; +import 'package:mobile/widgets/receipt_item.dart'; + +class ReceiptPage extends StatelessWidget { + final Receipt receipt; + + const ReceiptPage({super.key, required this.receipt}); + + @override + Widget build(BuildContext context) { + final receiptItems = receipt.allReceiptItems(); + + return Scaffold( + body: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const BackButton(), + Container( + margin: const EdgeInsets.symmetric(horizontal: 10), + child: Text(receipt.dateFormatted())), + Container( + margin: const EdgeInsets.symmetric(horizontal: 10), + child: Expanded( + child: ListView.builder( + shrinkWrap: true, + itemBuilder: (_, idx) => ReceiptItemView( + pricePerAmount: receiptItems[idx].product.price, + name: receiptItems[idx].product.name, + amount: receiptItems[idx].amount), + itemCount: receiptItems.length)), + ), + ], + ), + ); + } +} diff --git a/mobile/lib/repos/receipt.dart b/mobile/lib/repos/receipt.dart index f97d734..b12b0e5 100644 --- a/mobile/lib/repos/receipt.dart +++ b/mobile/lib/repos/receipt.dart @@ -61,6 +61,10 @@ class Receipt { Receipt({required this.date, required this.receiptItems, required this.id}); + List allReceiptItems() { + return receiptItems; + } + ReceiptItem? withProductId(int productId) { for (var i = 0; i < receiptItems.length; i++) { if (receiptItems[i].product.id == productId) {