From 8873456ceaef37dd1ce98f3438d9ba51f2615b8a Mon Sep 17 00:00:00 2001 From: Developer Date: Wed, 8 Apr 2026 01:31:32 +0800 Subject: [PATCH] feat: add CartController for cart state management --- lib/src/controllers/cart_controller.dart | 91 ++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 lib/src/controllers/cart_controller.dart diff --git a/lib/src/controllers/cart_controller.dart b/lib/src/controllers/cart_controller.dart new file mode 100644 index 0000000..db813bf --- /dev/null +++ b/lib/src/controllers/cart_controller.dart @@ -0,0 +1,91 @@ +import 'package:get/get.dart'; +import 'package:mom_kitchen/src/controllers/base/base_controller.dart'; +import 'package:mom_kitchen/src/controllers/home_controller.dart'; + +class CartItem { + final ProductModel product; + int quantity; + + CartItem({ + required this.product, + this.quantity = 1, + }); + + double get totalPrice => product.price * quantity; +} + +class CartController extends BaseController { + final cartItems = [].obs; + + @override + void onInit() { + super.onInit(); + } + + void addProduct(ProductModel product) { + final index = cartItems.indexWhere((item) => item.product.name == product.name); + if (index >= 0) { + cartItems[index].quantity++; + cartItems.refresh(); + } else { + cartItems.add(CartItem(product: product)); + } + } + + void removeProduct(String productName) { + cartItems.removeWhere((item) => item.product.name == productName); + } + + void updateQuantity(String productName, int quantity) { + final index = cartItems.indexWhere((item) => item.product.name == productName); + if (index >= 0) { + if (quantity <= 0) { + cartItems.removeAt(index); + } else { + cartItems[index].quantity = quantity; + cartItems.refresh(); + } + } + } + + void incrementQuantity(String productName) { + final index = cartItems.indexWhere((item) => item.product.name == productName); + if (index >= 0) { + cartItems[index].quantity++; + cartItems.refresh(); + } + } + + void decrementQuantity(String productName) { + final index = cartItems.indexWhere((item) => item.product.name == productName); + if (index >= 0) { + if (cartItems[index].quantity > 1) { + cartItems[index].quantity--; + cartItems.refresh(); + } else { + cartItems.removeAt(index); + } + } + } + + void clearCart() { + cartItems.clear(); + } + + double get totalPrice { + return cartItems.fold(0.0, (sum, item) => sum + item.totalPrice); + } + + int get totalItems { + return cartItems.fold(0, (sum, item) => sum + item.quantity); + } + + bool isInCart(String productName) { + return cartItems.any((item) => item.product.name == productName); + } + + int getQuantity(String productName) { + final index = cartItems.indexWhere((item) => item.product.name == productName); + return index >= 0 ? cartItems[index].quantity : 0; + } +}