gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 08:35:13 25 4
gpt4 key购买 nike

我最近开始使用 bloc,但我被困在这里。

我有一个状态:

class BasketState extends Equatable{
final Map<Item, int> itemsOrdered;

BasketState(this.itemsOrdered);

@override
List<Object> get props => [itemsOrdered]
}

以及以下 Bloc :

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 事件时, block 才会发出状态,然后如果我再次发送 BasketAdd 事件, block 就会什么也不发出。

唯一有效的方法是从状态中删除 Equatable,我不知道为什么。

我做错了什么吗?

最佳答案

Equatable 使用 get props 函数进行比较。

改变

  @override
List<Object> get props => throw UnimplementedError();

  @override
List<Object> get props => [itemsOrdered];

然后重试

编辑:答案现在在评论中,但另一个可能的问题是可变性。在这种情况下,我们应该每次生成一个新的 Map,而不是生成 itemsOrdered。

  yield BasketState(new Map<Item, int>.from(itemsOrdered));

关于Flutter - Bloc 仅在状态未扩展 Equatable 时发出状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63997814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com