我的Bloc面临问题。在应用程序中,用户可以按多个值进行过滤。当我使用filter
时,过渡正确完成,但是当我使用filter2
时,什么也没有发生,并且状态未在BlocBuilder中重建。我想念什么吗?这两种方法有什么区别(一种有效,另一种无效)。
示例方法:
Stream<EventFilteredState> _mapUpdateFilterToState(
UpdateFilter event,
) async* {
if (eventsBloc.state is EventsLoaded) {
final events = (eventsBloc.state as EventsLoaded).events;
final filter = [event.faculty]..addAll((state as FilteredEventsLoaded).faculties);
final filter2 = (state as FilteredEventsLoaded).faculties..add(event.faculty);
yield FilteredEventsLoaded(events, filter);
}
}
答案 0 :(得分:1)
我忘记了我所读过的地方,因此无法解释问题,但可以命名:区别在于您在filter
中创建了一个全新的数组。在filter2
中,您仅编辑状态数组。因此,有时比较无法正常进行。状态让您认为编辑后的数组是同一数组。
编辑:我刚刚意识到您的两个过滤器执行相同的操作。所以我删除了其余的答案。
编辑2:您可以在此处阅读有关列表比较的更多信息,例如:How can I compare Lists for equality in Dart?只是在Google上搜索“ flutter array compare”。
答案 1 :(得分:0)
我找到了解决方案。永远不要操纵状态,创建新状态。在这种情况下,我创建了该数组的副本并将其发布到FilteredEventsLoaded
。它只是工作。