我最近开始使用bloc,并且卡在这里。
我有一个状态:
class BasketState extends Equatable{
final Map<Item, int> itemsOrdered;
BasketState(this.itemsOrdered);
@override
List<Object> get props => [itemsOrdered]
}
还有以下集团:
class BasketBloc extends Bloc<BasketEvent, BasketState> {
Map<Item, int> _itemsOrdered = {};
BasketBloc() : super(BasketState({}));
@override
Stream<BasketState> mapEventToState(BasketEvent event) async* {
if (event is BasketAdd) {
_itemsOrdered.putIfAbsent(event.item, () => event.amount);
} else if (event is BasketRemove) {
_itemsOrdered.remove(event.item);
}
yield BasketState(_itemsOrdered);
}
}
只有在我第一次发送BasketAdd事件时,该团体才发出状态,然后,如果再次发送BasketAdd事件,则该团体不发出任何东西。
唯一可行的方法是从状态中删除Equatable,我不知道为什么。
我做错什么了吗?
答案 0 :(得分:1)
Equatable正在使用get props函数进行比较。
更改
actorRef instanceof DeadLetterActorRef ? "[no-sender]" : actorRef.path().toStringWithoutAddress()
到
@override
List<Object> get props => throw UnimplementedError();
然后重试
编辑:答案现在在注释中,但另一个可能的问题是可变性。在这种情况下,我们应该每次产生一个新的Map,而不是产生itemsOrdered。
@override
List<Object> get props => [itemsOrdered];