Flutter-仅在状态未扩展为Equatable时才发出状态

时间:2020-09-21 18:12:02

标签: flutter events stream state bloc

我最近开始使用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,我不知道为什么。

我做错什么了吗?

1 个答案:

答案 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];