diff --git a/lib/controller/cart_controller.dart b/lib/controller/cart_controller.dart new file mode 100644 index 0000000..8ef9a56 --- /dev/null +++ b/lib/controller/cart_controller.dart @@ -0,0 +1,68 @@ +import 'package:get/get.dart'; +import '../models/product_model.dart'; +import 'package:collection/collection.dart'; + +import '../models/product_model1.dart'; + +class CartController extends GetxController { + + var cartList = [].obs; + var cartCount = 0.obs; + var totalPrice = 0.0.obs; + var subtotal = 0.0.obs; + var gstTotal = 0.0.obs; + var grandTotal = 0.0.obs; + + // Add item to cart + void addToCart(Product product) { + var existingProduct = cartList.firstWhereOrNull((p) => p.id == product.id); + if (existingProduct != null) { + // Update quantity if already in cart + existingProduct.quantity++; + } else { + // Add new product to cart + cartList.add(product); + } + cartCount.value = cartList.length; + updateTotalPrice(); + } + + void updateTotalPrice() { + double subTotal = 0.0; + double gstTotalAmount = 0.0; + + for (var product in cartList) { + subTotal += product.price * product.quantity; + gstTotalAmount += (product.price * product.quantity * (product.gst / 100)); + } + + subtotal.value = subTotal; + gstTotal.value = gstTotalAmount; + grandTotal.value = subtotal.value + gstTotal.value; + } + + // Increase the quantity of a product + void increaseQuantity(Product product) { + final index = cartList.indexWhere((item) => item.id == product.id); + if (index != -1) { + cartList[index].quantity++; + updateTotalPrice(); + } + } + + // Decrease the quantity of a product + void decreaseQuantity(Product product) { + final index = cartList.indexWhere((item) => item.id == product.id); + if (index != -1 && cartList[index].quantity > 1) { + cartList[index].quantity--; + updateTotalPrice(); + } + } + + // Remove item from cart + void removeFromCart(Product product) { + cartList.removeWhere((item) => item.id == product.id); + cartCount.value = cartList.length; + updateTotalPrice(); + } +} diff --git a/lib/screens/product/cart_screen.dart b/lib/screens/product/cart_screen.dart index f2022a7..2001d60 100644 --- a/lib/screens/product/cart_screen.dart +++ b/lib/screens/product/cart_screen.dart @@ -27,7 +27,7 @@ class _CartScreenState extends State { void initState() { super.initState(); if (widget.productModel != null) { - _cartController.addToCart(widget.productModel); + _cartController.addToCart(widget.productModel!); } } diff --git a/lib/widgets/product_card.dart b/lib/widgets/product_card.dart index dab5b0e..026e00e 100644 --- a/lib/widgets/product_card.dart +++ b/lib/widgets/product_card.dart @@ -187,7 +187,7 @@ class _ProductCardState extends State { SizedBox(width: 20.0,), IconButton( onPressed: () { - _cartController.removeFromCart(widget.productModel); + _cartController.removeFromCart(widget.productModel!); }, icon: const Icon( Icons.delete_outline_rounded,