Flutter NoSuchMethodError:List<Category>无entries getter问题求解
错误根因
异常确实出在selectedCategories getter实现中:
- 你定义的
categoriesgetter最终调用了.toList(),返回值是List<Category>类型,而.entries是Map类型才有的属性,List不存在这个getter,你在selectedCategories里对List类型的categories返回值调用.entries,直接触发了本次抛出的No Such Method Error。 - 另外你的
toggle方法存在语法错误:取反表达式的括号不匹配,!(_categories[item]?? true}处混用了小括号和大括号,会直接导致编译失败。
修复代码
只需要修正getter的调用逻辑、补全语法错误即可,UI层代码无需改动:
// 修正toggle方法的语法错误 void toggle(Category item){ _categories[item] = !(_categories[item] ?? true); print(_categories[item]); } // 全部分类列表getter,原逻辑无需改动 get categories => _categories.entries.map((e) => e.key).toList(); // 已选分类getter:直接从存储键值对的_categories(RxMap类型)做筛选,不要调用返回List类型的categories getter get selectedCategories => _categories.entries .where((element) => element.value) .map((e) => e.key) .toList();
补充注意:当前
Category类作为Map的key使用时,没有重写==操作符和hashCode,如果后续传入新建的同name、同color的Category实例,会被判定为和Map中存储的key不相等,导致选中状态切换失效,如有需要请补全Category类的相等性判断逻辑。
内容的提问来源于stack exchange,提问作者bessam emre
相关产品推荐
相关产品推荐

