0

我的集团面临一个问题。在应用程序中,用户可以按多个值进行过滤。当我使用时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);
    }
  }
4

2 回答 2

1

我忘记了我读到它的地方,所以我无法解释这个问题,但我可以命名它:不同之处在于你在filter. 在filter2您只编辑您的状态的数组。因此,有时比较无法正常工作。在您生成编辑后的数组后,该州认为它是同一个数组。

编辑:我刚刚意识到你的两个过滤器做同样的事情。所以我删除了我的其余答案。

编辑 2:您可以在此处阅读有关列表比较的更多信息,fe:如何比较 Dart 中的列表是否相等?只需谷歌“颤振数组比较”。

于 2019-12-19T12:40:21.297 回答
0

我找到了解决方案。永远不要操纵状态;创建一个新的。在这种情况下,我创建了该数组的副本并发布到FilteredEventsLoaded. 它只是工作。

于 2019-12-19T20:19:39.967 回答