当产品项目添加到购物车时,如何更改图标?我正在使用provider编写一些将项目添加到购物车的逻辑。这个函数运行得很好,但我不知道如果只添加了一个项目,如何动态更改图标。我不想像setState方法那样在按下按钮时更改所有图标,因为不会更新所有按钮的状态。
现在我的代码是这样的:
class AddToCart with ChangeNotifier {
final Map<int, Item> _productCart = {};
Map<int, Item> get itemsInCart {
return _productCart;
}
void addInCart({ final int id}) {
if (_productCart.containsKey(id)) {
_productCart.update(id, (value) => Item(
id: value.id
));
print(_productCart);
} else {
_productCart.putIfAbsent(
id, () => Item(id: id));
print('object');
}
notifyListeners();
}
void removeFromCart(final int id){
//...Some logic
isAdd = false;
}
bool _isAdd = true;
bool get isAdd => _isAdd;
set isAdd(bool value) {
_isAdd = value;
notifyListeners();
}
}
在我的ui中,当用户点击心脏图标时,我试图更新图标的状态,但现在它不起作用:
Consumer<AddToCart>(builder: (ctx, value, child) {
return IconButton(
onPressed: () {
cart.addInCart();
context
.read<AddToCart>().removeFromCart(providerGridPagination.itemgrid[index]);
},
icon: FaIcon(
cart.isAdd ? FontAwesomeIcons.heart : FontAwesomeIcons.heartBroken, color: Colors.red,
));
我按照@Tim向我解释的那样做了,但我更改了所有图标,而不仅仅是一个添加到收藏夹中。我该怎么修?
据我所见,_isAdd
的值在任何时间点都不会更新,因此无论何时向您的购物车添加或删除项目(假设您考虑了购物车中的数量(,您都可能希望更新_isAdd
的值,尽管您可能希望在ProductItem
Widget的状态级别而不是在提供者级别进行更新。
通常,在提供商级别上这样做看起来是这样的:
class AddToCart with ChangeNotifier {
final Map<int, Item> _productCart = {};
Map<int, Item> get itemsInCart {
return _productCart;
}
void addInCart({final int id}) {
if (_productCart.containsKey(id)) {
_productCart.update(id, (value) => Item(id: value.id));
isAdd = true;
print(_productCart);
} else {
_productCart.putIfAbsent(id, () => Item(id: id));
print('object');
}
notifyListeners();
}
void removeFromCart(final int id){
//...Some logic
isAdd = false;
}
bool _isAdd = true;
bool get isAdd => _isAdd;
set isAdd(bool value) {
_isAdd = value;
notifyListeners();
}
}