1

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.


enter image description here

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!);
        }
      }
     }
VDTe
  • 438
  • 1
  • 4
  • 17

0 Answers0