Трепещите, пытаясь проверить, добавлен ли товар в корзину для пользователя, но функция только выполняется

# #firebase #flutter #firebase-realtime-database

Вопрос:

я пытаюсь проверить, добавлен товар в корзину или нет, проверяя, доступны ли идентификатор продукта и идентификатор пользователя в одном и том же элементе корзины, но эта функция работает не только для последнего вставленного элемента корзины.

База данных: База данных

товар справа был добавлен в корзину последним, сначала были добавлены товар посередине и слева:

я надеюсь, что моя идея ясна

 checkItemAddedToCart() async {
  try {
    var collectionRef = await databseRefrence.child("Cart").get();
    Map<dynamic, dynamic> values = collectionRef.value;
    values.forEach((key, values) {
      if (values['productId'] == widget.pid amp;amp; values['userId'] == Id) {
        //this is only happening on the last item added to cart!
        setState(() {
          buttonText = "Added to cart!!";
          addCartButton = true;
        });
      } else {
        setState(() {
          buttonText = "Add to cart";
          addCartButton = false;
        });
      }
    });
  } catch (e) {
    throw e;
  }
}
 

Ответ №1:

Вы звоните setState по каждому товару в корзине. Поэтому, когда вы вызываете его для пункта 2, вы перезаписываете состояние, которое вы установили для пункта 1.

Вместо этого вы должны использовать цикл только для проверки того, можете ли вы найти подходящий товар в корзине, а затем позвонить setState после завершения цикла:

 var found = false;
values.forEach((key, values) {
  if (values['productId'] == widget.pid amp;amp; values['userId'] == Id) {
    found = true
  }
}
setState(() {
  buttonText = found ? "Added to cart!!" : "Add to cart";
  addCartButton = found;
});
 

Комментарии:

1. спасибо, сэр, это сработало хорошо 🌹 🌹 Я все еще новичок в flutter!