rd-android-app/lib/controller/cart_controller.dart

179 lines
4.8 KiB
Dart

import 'package:get/get.dart';
import '../models/product_model.dart';
import '../models/product_model1.dart';
class CartController extends GetxController {
var cartList = <Product>[].obs;
var cartCount = 0.obs;
var subtotal = 0.0.obs;
var gstTotal = 0.0.obs;
var grandTotal = 0.0.obs;
// Track the selected products
var selectedProducts = <Product>[].obs;
@override
void onInit() {
super.onInit();
// Initialize the cart list or other initializations if needed
initializeSelections();
}
void addToCart(Product product) {
var existingProduct = cartList.firstWhereOrNull((p) => p.id == product.id);
if (existingProduct != null) {
existingProduct.quantity++;
} else {
cartList.add(product);
}
cartCount.value = cartList.length;
updateTotalPrice();
}
void updateTotalPrice() {
double subTotal = 0.0;
double gstTotalAmount = 0.0;
for (var product in selectedProducts) {
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;
}
void increaseQuantity(Product product) {
final index = cartList.indexWhere((item) => item.id == product.id);
if (index != -1) {
cartList[index].quantity++;
if (selectedProducts.contains(cartList[index])) {
updateTotalPrice();
}
}
}
void decreaseQuantity(Product product) {
final index = cartList.indexWhere((item) => item.id == product.id);
if (index != -1 && cartList[index].quantity > 1) {
cartList[index].quantity--;
if (selectedProducts.contains(cartList[index])) {
updateTotalPrice();
}
}
}
void removeFromCart(Product product) {
cartList.removeWhere((item) => item.id == product.id);
selectedProducts.remove(product);
cartCount.value = cartList.length;
updateTotalPrice();
}
void toggleProductSelection(Product product, bool isSelected) {
if (isSelected) {
if (!selectedProducts.contains(product)) {
selectedProducts.add(product);
}
} else {
selectedProducts.remove(product);
}
updateTotalPrice();
}
void selectAllProducts(bool selectAll) {
if (selectAll) {
selectedProducts.assignAll(cartList);
} else {
selectedProducts.clear();
}
updateTotalPrice();
}
void initializeSelections() {
selectAllProducts(true);
}
}
// 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 = <Product>[].obs;
// var cartCount = 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.where((p) => p.selected)) {
// 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();
// }
//
// // Toggle product selection
// void toggleProductSelection(Product product, bool isSelected) {
// final index = cartList.indexWhere((item) => item.id == product.id);
// if (index != -1) {
// cartList[index].selected = isSelected;
// updateTotalPrice();
// }
// }
// }