Как увеличить количество товаров в тележке электронной коммерции с помощью провайдера во Flutter

Я хочу увеличить количество продукта, когда я нажимаю кнопку добавления в обзоре продукта или добавляю в корзину несколько раз, но я не увеличиваю его количество, остается прежним, кто-то помогает мне решить эту проблему. Как я могу присвоить предметам указатель?

Я использую Провайдера для управления состоянием

ProviderSpace.dart

import 'dart:collection';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';

class AddItem extends ChangeNotifier {
  List<Cart> _addNewData = [];


  int get newDataCount {
    return _addNewData.length;
  }

  UnmodifiableListView<Cart> get tasks {
    return UnmodifiableListView(_addNewData);
  }

  void addCardManager(String itemName, String assetName, int itemRate,
      int quantity, String type) {
    final newAddItem = Cart(
      name: itemName,
      type: type,
      rate: itemRate,
      asset: assetName,
    );
    _addNewData.add(newAddItem);
    notifyListeners();
  }

  void updateTask(Cart task) {
    task.toggleDone();
    notifyListeners();
  }

  void decrease(Cart task) {
    task.decreaseDown();
    notifyListeners();
  }

  void removeCard(Cart task) {
    _addNewData.remove(task);
    notifyListeners();
  }
}

class Cart {
  final String name;
  final String asset;
  final String type;
  final int rate;
  int quantity;

  Cart({
    this.name,
    this.asset,
    this.type,
    this.rate,
    this.quantity = 1,
  });

  void toggleDone() {
    quantity++;
  }

  void decreaseDown() {
    quantity == 0 ? 0 : quantity--;
  }

}

Код, в котором мне нужно обновить значение

          changeButtonOnTap
                ? Container(
                    width: 80,
                    height: 25,
                    child: FlatButton(
                      onPressed: () {
                        Provider.of<AddItem>(context, listen: false)
                            .addCardManager(widget.name, widget.name,
                                widget.mrp, widget.quantity, widget.type);
                        setState(() {
                          changeButtonOnTap = false;
                        });
                      },
                      color: Color(0xffFF6200),
                      child: Text("Add",
                          style: TextStyle(
                            fontWeight: FontWeight.bold,
                            fontSize: 11,
                            color: Color(0xffffffff),
                          )),
                    ),
                  )
                : Container(
                    height: 25.00,
                    width: 80,
                    decoration: BoxDecoration(
                      color: Color(0xffFF6200),
                      borderRadius: BorderRadius.circular(30.00),
                    ),
                    child: Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      children: [
                        GestureDetector(
                            onTap: () {                                          <-----here i need to make change
                              Provider.of<AddItem>(context, listen: false)
                                  .updateTask(Provider.of<AddItem>(context,
                                          listen: false)
                                      .tasks[0]);
                              setState(() {
                                value++;
                                print(Provider.of<AddItem>(context,
                                        listen: false)
                                    .newDataCount);
                              });
                            },
                            child: Icon(Icons.add_circle,
                                color: Colors.white)),
                        Text(
                          value.toString(),
                          style: TextStyle(color: Colors.white),
                        ),
                        GestureDetector(
                          onTap: () {
                            setState(() {
                              value >= 2 ? value-- : null;
                            });
                          },
                          child: Icon(
                            Icons.do_not_disturb_on,
                            color: Colors.white,
                          ),
                        )
                      ],
                    ),
                  )

person Asbah Riyas    schedule 24.06.2020    source источник
comment
ты нашел какое-нибудь решение?   -  person Suraj Khanal    schedule 08.09.2020
comment
@SurajKhanal Я добавил ответ, который, как я понял, на вышеуказанный вопрос ... приведенный ниже ответ отлично работает ... и я использую этот код для большей части своей корзины для приложений электронной коммерции   -  person Asbah Riyas    schedule 08.09.2020
comment
Спасибо, что разместили свое решение.   -  person Suraj Khanal    schedule 08.09.2020


Ответы (1)


Приведенный ниже код используется для увеличения количества товара (если добавлен тот же товар)

  void addCardManager(String itemName, String assetName, int itemRate,
    int ogRate, int quantity, String type) {
    final newAddItem = Cart(
      name: itemName,
      type: type,
      rate: itemRate,
      ogPrice: ogRate,
      asset: assetName,
    );
    if (_addNewData.length != 0) {
      bool isFound = false;
      for (int itemcount = 0; itemcount < newDataCount; itemcount++) {
        if (_addNewData[itemcount].name == newAddItem.name) {
          print("addCard");
          isFound = true;
          _addNewData[itemcount].toggleDone();
          notifyListeners();
          break;
        }
      }
      if (!isFound) {
        _addNewData.add(newAddItem);
        notifyListeners();
      }
    } else {
      _addNewData.add(newAddItem);
      notifyListeners();
    }
  }

  void removeCardManager(String itemName, String assetName, int itemRate,
      int quantity, String type) {
    final newAddItem = Cart(
      name: itemName,
      type: type,
      rate: itemRate,
      asset: assetName,
    );
    print(_addNewData);
    if (_addNewData.length != 0) {
      bool isFound = false;

      for (int itemcount = 0; itemcount < newDataCount; itemcount++) {
        if (_addNewData[itemcount].name == newAddItem.name) {
          print("RemoveCard");
          isFound = true;
          decrease(_addNewData[itemcount]);
          notifyListeners();
          break;
        }
      }

    }
  }

для справки я добавлю полный код, связанный с приведенным выше кодом

  void updateTask(Cart task) {
    task.toggleDone();
    notifyListeners();
  }

  void decrease(Cart task) {
    if (task.quantity == 1) {
      removeCard(task);
    }
    task.decreaseDown();
    notifyListeners();
  }

  void removeCard(Cart task) {
    _addNewData.remove(task);
    notifyListeners();
  }
}

class Cart {
  final String name;
  final String asset;
  final int ogPrice;
  final String type;
  final int rate;
  int quantity;

  Cart({
    this.name,
    this.ogPrice,
    this.asset,
    this.type,
    this.rate,
    this.quantity = 1,
  });

  void toggleDone() {
    quantity++;
  }

  void decreaseDown() {
    quantity == 0 ? 0 : quantity--;
  }
}
person Asbah Riyas    schedule 08.09.2020