繁体   English   中英

Flutter Bloc:状态转换

[英]Flutter Bloc: state transition

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM