finish shopping page

This commit is contained in:
Mikkel Troels Kongsted 2025-01-30 14:52:03 +01:00
parent 9b74452b94
commit d62f8bd29e
3 changed files with 109 additions and 1 deletions

View File

@ -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")),
),
),
],

View File

@ -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<CartRepo>();
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")))
],
),
);
}
}

View File

@ -119,6 +119,11 @@ class CartRepo extends ChangeNotifier {
totalItemsInCart() {
return cart.fold<int>(0, (prev, cartItem) => prev + cartItem.amount);
}
totalPrice() {
return cart.fold<int>(
0, (prev, cartItem) => prev + cartItem.amount * cartItem.product.price);
}
}
class CartItem {