如何使用提供商删除购物车项目

How to Remove cart item using provider

我正在使用供应商 class,我可以在其中使用产品 ID 将商品添加到购物车列表,但是当我使用类似的功能从购物车中删除商品时,该功能似乎找不到商品 id.or 我做错了。

我用来在提供者中添加项目的函数class:

//---------------------------------------add item
  void addItem({
    required CartItem product,
  }) {
    if (items.containsKey(product.id)) {
      final double value = product.price;
      items.update(
        product.id,
        (cartitem) => cartitem.copy(
          qnt: cartitem.qnt + 1,
          price: cartitem.price + value,
        ),
      );
    } else {
      items.putIfAbsent(
          product.id,
          () => product.copy(
                id: DateTime.now().toString(),
                qnt: 1,
              ));
    }
    //---------------------------------------------------------total price
    _totalPrice = _totalPrice + product.price;

    notifyListeners();
  }

以及我购物车中的清单:

 //----------- items cart list
  Widget buildCarditems(BuildContext context) {
    final porvidr = Provider.of<ShopProvider>(context, listen: false);

    if (porvidr.items.isEmpty) {
      return Center(
        child: Text(
          'Cart is Empty',
          style: TextStyle(
            color: Colors.white,
            fontSize: 20,
          ),
        ),
      );
    } else {
      return ListView(
        children: porvidr.items.values.map(buildcarditem).toList(),
      );
    }
  }

  //------------cart listtile
  Widget buildcarditem(CartItem c_item) {
    return ListTile(
        leading: CircleAvatar(backgroundImage: AssetImage(c_item.imgUrl)),
        title: Row(
          children: [
            Text(
              '${c_item.qnt}x',
              style: TextStyle(color: Colors.white),
            ),
            SizedBox(
              width: 10,
            ),
            Expanded(
              child: Text(
                c_item.title,
                style: TextStyle(
                  color: Colors.white,
                  fontWeight: FontWeight.bold,
                ),
                overflow: TextOverflow.ellipsis,
                maxLines: 1,
              ),
            ),
          ],
        ),
        trailing: Text(
          '$${c_item.price}',
          style: TextStyle(
            color: Colors.white,
          ),
        ));
  }

在哪里可以使用 ontap 函数获取产品 ID?

您可以将它添加到每个列表项的任何位置,您可以将列表块包裹在 n 手势检测器小部件中。这取决于要求。