【问题标题】:Flutter Bloc: state transitionFlutter Bloc:状态转换
【发布时间】:2020-04-12 00:57:37
【问题描述】:

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

【问题讨论】:

    标签: flutter bloc flutter-bloc


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      编辑:我刚刚意识到您的两个过滤器也是如此。所以我删除了我的其余答案。

      编辑 2:您可以在此处阅读有关列表比较的更多信息,例如:How can I compare Lists for equality in Dart? 只需 google “flutter array compare”。

      【讨论】:

      • 感谢您的回答。我对此感到很困惑。应该是一样的。你认为它可以与我用来比较的 Equatable 包有关吗?
      猜你喜欢
      • 2021-03-19
      • 2020-05-06
      • 2020-07-09
      • 2021-03-04
      • 2020-10-10
      • 2020-03-26
      • 2020-06-17
      • 2020-06-08
      • 2020-01-14
      相关资源
      最近更新 更多