Flutter 颤振集团:状态转换

Flutter 颤振集团:状态转换,flutter,bloc,flutter-bloc,Flutter,Bloc,Flutter Bloc,我面临着集团内的一个问题。在应用程序中,用户可以按多个值进行筛选。当我使用filter时,转换是正确的,但当我使用filter2时,在BlocBuilder中不会发生任何事情,状态也不会重新生成。我错过什么了吗?这两种方法(一种有效,另一种无效)之间的区别是什么 示例方法: Stream<EventFilteredState> _mapUpdateFilterToState( UpdateFilter event, ) async* { if (eventsBlo

我面临着集团内的一个问题。在应用程序中,用户可以按多个值进行筛选。当我使用
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);
    }
  }
Stream\u mapUpdateFilterToState(
UpdateFilter事件,
)异步*{
如果(eventsBloc.state为EventsLoaded){
最终事件=(eventsBloc.state为EventsLoaded)。事件;
最终筛选器=[event.faculty]…addAll((状态为FilteredEventsLoaded.faculties);
final filter2=(状态为FilteredEventsLoaded.faculties..add(event.faculty);
生成筛选器已删除(事件、筛选器);
}
}

我忘了我读到的地方,所以我无法解释问题,但我可以给它命名:区别在于你在
过滤器中创建了一个全新的数组。在
filter2
中,您只编辑状态的数组。有时,由于这一点,这种比较是不正确的。在您编辑完数组后,州政府认为它是同一个数组

编辑:我刚刚意识到你的两个过滤器的作用是一样的。因此,我删除了我其余的答案


编辑2:你可以在这里阅读更多关于列表比较的内容,例如:只需谷歌“颤振数组比较”

我找到了解决办法。永远不要操纵状态,创建一个新的状态。在本例中,我创建了该数组的副本并发布到
FilteredEventsLoaded
。它只是工作

谢谢你的回答。我对此很困惑。应该是一样的。你认为这和我用来比较的Equatable软件包有关吗?