如何将ID匹配字符串数组元素的对象转移至另一列表?
筛选List中ID匹配数组元素的对象
我已将获取的数据转换为List<DataDependantListModel>类型的listModel,现有字符串数组visaFamilyId,需要将listModel中id与数组元素匹配的对象筛选至另一列表,但条件逻辑未生效。
相关代码
DataDependantListModel类
class DataDependantListModel { String? id; String? name; DataDependantListModel({this.id, this.name}); DataDependantListModel.fromJson(Map<String, dynamic> json) { id = json['Id']; name = json['Name']; } Map<String, dynamic> toJson() { final Map<String, dynamic> data = <String, dynamic>{}; data['Id'] = id; data['Name'] = name; return data; } }
调试打印代码
debugPrint("visafamilyId : " + visaFamilyId.toString()); debugPrint("visa family contain : " + visaFamilyId.contains("6").toString());
截图信息
- 第一张截图显示:
visaFamilyId打印结果为["6"],visaFamilyId.contains("6")返回true - 第二张截图显示:
listModel中对象的id字段值为6(数字类型,无引号)
问题分析与解决方法
最可能的原因是类型不匹配:visaFamilyId中的元素是字符串类型(如"6"),但listModel中对象的id实际是数字类型(如6),直接用contains判断会因类型不同返回false。
解决方式二选一:
解析时统一类型
修改fromJson方法,将id强制转为字符串,确保类型一致:DataDependantListModel.fromJson(Map<String, dynamic> json) { id = json['Id'].toString(); // 把JSON中的Id转为字符串 name = json['Name']; }筛选时兼容类型
在筛选逻辑中,将model.id转为字符串后再判断是否在数组中,同时处理id为空的情况:List<DataDependantListModel> filteredList = listModel.where((model) { if (model.id == null) return false; return visaFamilyId.contains(model.id.toString()); }).toList();
内容的提问来源于stack exchange,提问作者Samet Demirtop
相关产品推荐
相关产品推荐

