Flutter解析API子模型报错:'String'非'index'的'int'子类型
解决Dart解析API时
'String' is not a subtype of type 'int' of 'index'错误 问题场景
从API获取数据时,解析TravelStatus.dart子模型触发类型错误:'String' is not a subtype of type 'int' of 'index'。
错误原因
API返回的travel、destination、acomodation字段为数组类型,但TravelStatus模型中对应字段被定义为单个对象类型。当解析器尝试用字符串键(如travel['id'])访问数组时,数组仅支持整数索引访问,因此触发类型不匹配错误。
解决方案
修改TravelStatus模型,将travel、destination、acomodation字段的类型从单个对象改为对应模型的数组(List<>),同时调整解析逻辑适配数组结构。
代码修改示例
原错误的TravelStatus模型定义
class TravelStatus { final Travel travel; final Destination destination; final Acomodation acomodation; TravelStatus({required this.travel, required this.destination, required this.acomodation}); factory TravelStatus.fromJson(Map<String, dynamic> json) { return TravelStatus( travel: Travel.fromJson(json['travel']), destination: Destination.fromJson(json['destination']), acomodation: Acomodation.fromJson(json['acomodation']), ); } }
修改后的TravelStatus模型定义
class TravelStatus { final List<Travel> travel; final List<Destination> destination; final List<Acomodation> acomodation; TravelStatus({required this.travel, required this.destination, required this.acomodation}); factory TravelStatus.fromJson(Map<String, dynamic> json) { return TravelStatus( travel: List<Travel>.from(json['travel'].map((x) => Travel.fromJson(x))), destination: List<Destination>.from(json['destination'].map((x) => Destination.fromJson(x))), acomodation: List<Acomodation>.from(json['acomodation'].map((x) => Acomodation.fromJson(x))), ); } }
特殊场景处理
如果业务中API返回的数组仅包含单个元素,且需要将其作为单个对象使用,可在解析时取数组第一个元素:
factory TravelStatus.fromJson(Map<String, dynamic> json) { return TravelStatus( travel: Travel.fromJson(json['travel'].first), destination: Destination.fromJson(json['destination'].first), acomodation: Acomodation.fromJson(json['acomodation'].first), ); }
注意:此方式需确保API返回的数组非空,建议添加空值判断避免空指针错误。
内容的提问来源于stack exchange,提问作者Ardabily
相关产品推荐
相关产品推荐

