Flutter Bloc:状态转换

时间:2019-12-19 12:10:38

标签: flutter bloc flutter-bloc

我的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);
    }
  }

2 个答案:

答案 0 :(得分:1)

我忘记了我所读过的地方,因此无法解释问题,但可以命名:区别在于您在filter中创建了一个全新的数组。在filter2中,您仅编辑状态数组。因此,有时比较无法正常进行。状态让您认为编辑后的数组是同一数组。

编辑:我刚刚意识到您的两个过滤器执行相同的操作。所以我删除了其余的答案。

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

答案 1 :(得分:0)

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