【问题标题】:Counter for every item每个项目的计数器
【发布时间】:2020-11-23 21:31:40
【问题描述】:

我正在尝试使用提供程序包制作购物车页面,并且我希望每个商品都有一定数量,所以每次我添加新产品时,我都希望它检查它是否存在于列表中,如果它存在我希望它计算添加了多少次,但如果它尚未在购物车中,则将其添加到购物车中

这是我的Cart 课程

import 'package:flutter/material.dart';

import 'item.dart';

class Cart extends ChangeNotifier{
  List<Item> items = [];
  double totalPrice = 0.0;
  int singleProductCount = 0;

  void add(Item item) {
      items.add(item);
      totalPrice += item.price;
      notifyListeners();
  }

  void remove(Item item) {
    items.remove(item);
    totalPrice -= item.price;
    notifyListeners();
  }

  int get count {
    return items.length;
  }

  double get totalprice {
    return totalPrice;
  }

  int get singleproductCount {
    return singleProductCount;
  }

  List<Item> get basketItems {
    return items;
  }
}

这是将其添加到购物车的IconButton

IconButton(icon: Icon(Icons.add), onPressed: () {
                                  cart.add(Item(name: snapshot.data.documents[index]["name"], price: snapshot.data.documents[index]["price"], imageUrl: snapshot.data.documents[index]["imageUrl"]));
                                }),

【问题讨论】:

    标签: flutter dart flutter-dependencies


    【解决方案1】:

    我想出了一个方法,但希望有人会有更好的解决方案。但我所做的实际上是创建另一个列表来帮助我们处理这种情况。此列表将包含名称(或您希望包含的任何名称)。然后我检查该名称是否在列表中,如果是则返回 null,否则将 Item 添加到列表中。在添加类实例的情况下,这是我目前能想到的唯一方法。

    List<String> _names = [];
    double totalPrice = 0.0;
    
    
    List<String> get names {
      return _names;
      }
    
    
    
    void add(Item item, String newNames) {
        itemList.add(item);
        _names.add(newNames); // add new names to names list
        totalPrice += item.price;
        notifyListeners();
      }
    
      // If the names list contains any name from the docs already, then don't add anything
      // else add the name to the list along with the Item
           cart.names.contains(snapshot.data.documents[index]["name"])
           ? null
           : cart.add(
            Item(
             name: snapshot.data.documents[index]["name"], 
             price: snapshot.data.documents[index]["price"],
             imageUrl: snapshot.data.documents[index]["imageUrl"]
            ),
    
             snapshot.data.documents[index]["name"]
         );
    

    顺便说一句,如果您不打算通过使用下划线将属性 private 设置为 int _singleProductCount = 0,那么使用 get 并没有真正的意义;

    【讨论】:

    • 它说它不是每次都包含它
    • 我尝试打印单个项目以查看该项目的外观 Instance of 'Item'
    • 我已经更新了我的答案,希望它现在可以工作。
    猜你喜欢
    • 2019-02-17
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 2019-07-25
    相关资源
    最近更新 更多