I have a shopping cart project using provider. When changing variant(array of object) the already pushed value inside the cart also changes. How do I prevent the value from changing when it is already inserted.
Adding items to cart
addProduct() async{
final productDetailsProvider =Provider.of<ProductDetailsProvider>(context,listen: false);
List<VariantDetails>? variants = productDetailsProvider.variants;
List<AddOnDetails>? extras = productDetailsProvider.extras;
double total = productDetailsProvider.total;
CartData cartItem = CartData(
addOnList: extras,
variantList: variants,
total:total);
final cart =Provider.of<CartProvider>(context,listen: false);
cart.addToCart(context, cartItem);
}
Provider class - The cart array variantList still changes when clicking button again. Should not change for the already pushed/added values. Total does not change only variantList and extras
class CartProvider extends ChangeNotifier {
List<CartData>? cart = [];
addToCart(context,CartData cartItem) {
if (cart!.isEmpty) {
cart?.add(cartItem);
}
print('${cart?[0]?.variantList}');//variantList changes value even when it's already pushed to array
}
Provider class changing variant for reference
class ProductDetailsProvider extends ChangeNotifier {
List<VariantDetails>? variants = [];
addVariant(VariantDetails? item) {
var exist =
variants?.indexWhere((element) => element.typeID == item?.typeID);
if (exist != -1) {
variants?[exist!] = item!;
} else {
variants?.insert(0, item!);
}
}
}