Flutter类型转换错误:_InternalLinkedHashMap无法转为List问题
Flutter类型转换错误解决:_InternalLinkedHashMap<String, dynamic> 无法转为 List
错误信息
出现类型转换错误:type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List<dynamic>' in type cast,错误触发在代码中的getData as List语句处。
API响应数据
{ "message": null, "data": { "items": [ { "dealerId": 634, "dealerName": "Test12", "dealerCode": "dandasn123" }, { "dealerId": 36, "dealerName": "Saurabh", "dealerCode": "ASDF" }, { "dealerId": 38, "dealerName": "Muskan", "dealerCode": "ASDF" }, { "dealerId": 16, "dealerName": "Nsj94", "dealerCode": "ASDF1234" } ] }, "type": null }
生成的Model类
DealerDetailsModel
import 'Data.dart'; class DealerDetailsModel { DealerDetailsModel({ this.message, this.data, this.type, }); DealerDetailsModel.fromJson(dynamic json) { message = json['message']; data = json['data'] != null ? Data.fromJson(json['data']) : null; type = json['type']; } dynamic message; Data? data; dynamic type; Map<String, dynamic> toJson() { final map = <String, dynamic>{}; map['message'] = message; if (data != null) { map['data'] = data?.toJson(); } map['type'] = type; return map; } }
Data
import 'Items.dart'; class Data { Data({ this.items, }); Data.fromJson(dynamic json) { if (json['items'] != null) { items = []; json['items'].forEach((v) { items?.add(Items.fromJson(v)); }); } } List<Items>? items; Map<String, dynamic> toJson() { final map = <String, dynamic>{}; if (items != null) { map['items'] = items?.map((v) => v.toJson()).toList(); } return map; } }
Items
class Items { Items({ this.dealerId, this.dealerName, this.dealerCode, }); Items.fromJson(dynamic json) { dealerId = json['dealerId']; dealerName = json['dealerName']; dealerCode = json['dealerCode']; } int? dealerId; String? dealerName; String? dealerCode; Map<String, dynamic> toJson() { final map = <String, dynamic>{}; map['dealerId'] = dealerId; map['dealerName'] = dealerName; map['dealerCode'] = dealerCode; return map; } }
出错的经销商详情获取方法
Future<List<DealerDetailsModel>> getDealerDetails() async { var params = {'': ''}; if (isNetworkAvail) { await apiBaseHelper.getAPICall(getDealerDetailsData, params).then( (getData) async => { dealerData = (getData as List) .map((data) => DealerDetailsModel.fromJson(data)) .toList(), }, ); } return dealerData; }
解决方法
问题根源
API返回的是单个JSON对象(Map结构),而非数组(List),但你错误地将返回结果强转为List类型,导致类型不匹配。
修改后的代码
根据需求,有两种修改方式:
方式1:返回经销商列表(List)
如果你的目标是获取items里的经销商数据,直接解析整个响应对象后提取列表:
Future<List<Items>?> getDealerDetails() async { var params = {'': ''}; List<Items>? dealerData; if (isNetworkAvail) { final response = await apiBaseHelper.getAPICall(getDealerDetailsData, params); // 解析整个响应为DealerDetailsModel对象 final dealerModel = DealerDetailsModel.fromJson(response); // 提取items列表 dealerData = dealerModel.data?.items; } return dealerData; }
方式2:返回完整的DealerDetailsModel对象
如果需要保留整个响应的结构(包含message、data、type),调整方法返回值并直接解析:
Future<DealerDetailsModel?> getDealerDetails() async { var params = {'': ''}; DealerDetailsModel? dealerModel; if (isNetworkAvail) { final response = await apiBaseHelper.getAPICall(getDealerDetailsData, params); dealerModel = DealerDetailsModel.fromJson(response); } return dealerModel; }
核心说明
你的Model类已经正确匹配了API的响应结构,不需要将顶层响应转为List。直接调用DealerDetailsModel.fromJson(response)即可完成解析,后续按需提取内部的items列表或其他字段。
内容的提问来源于stack exchange,提问作者Rudransh Singh Mahra
相关产品推荐
相关产品推荐

