# #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!