[英]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.