【发布时间】:2019-06-30 12:25:14
【问题描述】:
我正在尝试使用 bloc 模式构建一个购物车,因为这是我在 Flutter 中的第一个应用程序以及使用 bloc。我的问题是,每次用户将产品添加到购物车时,我都试图获取一个 int 流。但似乎我使用的接收器和流错误,但我不知道确切的位置
ItemCounterBloc
final _itemCounterSubject = BehaviorSubject<int>(seedValue: 0);
final _cartItemsController = StreamController<List<CartItem>>();
int count = 0;
ItemCounterBloc(Item item){
_cartItemsController.stream
.map((list) => list.any((cartItem)=> cartItem.item == item))
.listen((increment){
count += 1;
_itemCounterSubject.add(count);
});
}
Sink<List<CartItem>> get cartItems => _cartItemsController.sink;
ValueObservable<int> get isInCart => _itemCounterSubject.stream.distinct().shareValue(seedValue: 0);
void dispose(){
_cartItemsController.close();
_itemCounterSubject.close();
}
}
计数器
StreamBuilder<int>(
stream: _bloc.isInCart,
initialData:0,
builder: (context, snapshot) => Text('${snapshot.data}')
我还有另一个用于将商品添加到购物车的模块。
【问题讨论】:
-
一件令我印象深刻的事情:您正在使用带有返回
bool的函数的.map,但没有使用导致.listen回调- 所以 Stream 上的每个元素都会做一些工作并丢弃结果。您是否打算使用.where过滤流?