我正在构建一个带有 flutter bloc 的购物车系统。我有一个产品列表,现在我正在向列表中添加新产品。它工作正常。但我想增加一个项目的计数,如果它存在于列表中。
Stream<CartState> _mapCartItemAddedToState(
CartItemAdded event,
CartState state,
) async* {
if (state is CartLoaded) {
try {
yield CartLoaded(
cart: Cart(items: List.from(state.cart.items)..add(event.item)),
);
} on Exception {
yield CartError();
}
}
}
Stream<CartState> _mapCartItemIncrementedToState(
CartItemIncremented event, CartState state) async* {
if (state is CartLoaded) {
List<Item> items = List.from(state.cart.items);
var index = items.indexWhere((item) => item.id == event.id);
items[index].count++;
try {
yield CartLoaded(cart: Cart(items: items));
} on Exception {
yield CartError();
}
}
}
这是我正在使用的两种状态。首先是直接添加产品,而第二个是在更新列表内的项目后重新分配列表。我的问题是我的计数状态没有更新。我用过等号。包括所有依赖项。这种方法是正确的还是我应该采用另一种方法?我无法意识到如何做到这一点。我的页面只有在我刷新后才会更新。
答案 0 :(得分:0)
前段时间,我构建了使用 BLoC 进行状态管理的 Shopping App Prototype。这个项目解决了完全相同的问题。您可以在此处找到 Cart BLoC(连同项目存储库)的示例:https://github.com/mkobuolys/shopping-app-prototype/blob/main/lib/modules/cart/bloc/cart_bloc.dart