为什么List<Map>调用contains方法检查元素存在时返回false?
原因说明
Dart 的 List.contains() 方法默认使用引用相等判断两个对象是否匹配,而非对比对象的内容值。
你代码中列表内存储的 {"id": "1", "name": "zein"} 和 contains 入参里的同结构 Map 是两个完全独立的实例,在内存中对应不同的存储地址,因此判定为不相等,返回 false。
解决方法
如果需要按内容匹配 Map 是否存在,可选择以下两种常用方案:
- 手动遍历列表匹配键值:
bool hasTarget = mapList.any((element) => element['id'] == '1' && element['name'] == 'zein'); print(hasTarget); // 输出 true
- 使用官方
collection工具包的 Map 值相等判断能力:
import 'package:collection/collection.dart'; const mapEqual = MapEquality(); bool hasTarget = mapList.any((element) => mapEqual.equals(element, {"id": "1", "name": "zein"})); print(hasTarget); // 输出 true
内容的提问来源于stack exchange,提问作者Subair K
相关产品推荐
相关产品推荐

