Счетчик на каждую вещь - PullRequest
       21

Счетчик на каждую вещь

3 голосов
/ 03 августа 2020

Я пытаюсь создать страницу корзины, используя пакет поставщика, и я хотел иметь количество каждого отдельного элемента, поэтому каждый раз, когда я добавляю новый продукт, я хочу, чтобы он проверял, существует ли он в списке и существует ли я хочу, чтобы он подсчитал, сколько раз он был добавлен, но если его еще нет в корзине, он добавляется в корзину

это мой 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"]));
                                }),

1 Ответ

0 голосов
/ 03 августа 2020

Я придумал способ, но, надеюсь, у кого-то будет лучшее решение. Но на самом деле я создал еще один список, чтобы помочь нам с этим заболеванием. Этот список будет содержать имена (или все, что вы хотите). Затем я проверяю, есть ли это имя в списке, и если оно есть, оно возвращает 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"]
     );

Кстати, используя get не имеет смысла, если вы не собираетесь делать свои свойства частными с помощью подчеркивания, например, int _singleProductCount = 0;

...