flutter - Flutter 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);
}
}
解决方案
我忘记了我读到它的地方,所以我无法解释这个问题,但我可以命名它:不同之处在于你在filter
. 在filter2
您只编辑您的状态的数组。因此,有时比较无法正常工作。在您生成编辑后的数组后,该州认为它是同一个数组。
编辑:我刚刚意识到你的两个过滤器做同样的事情。所以我删除了我的其余答案。
编辑 2:您可以在此处阅读有关列表比较的更多信息,fe:如何比较 Dart 中的列表是否相等?只需谷歌“颤振数组比较”。
推荐阅读
- c++ - 关于 C++ 中运算符优先级的问题
- python - ScrapySplash javascript页面不会呈现
- java - 使用 Spring-Data-Rest,如何从一个 REST 调用更新 OneToOne 关系双方的 FK?
- laravel - 在下拉列表中显示特定数据
- vba - 从 Access VBA 在 SQL 中保存 jpg
- wordpress - 删除分页的最后一页
- sql - “SELECT TOP”查询的意外 SQL 行为
- python - 填充颜色不适用于我的函数(Python 乌龟图形)
- unix - Ocaml 客户端-服务器:客户端在尝试连接时返回 EAGAIN
- mysql - 更新 MySQL 中 2 个表之间的电子邮件匹配 - 黑名单