Flutter/Dart JSON编解码报错:List<dynamic>无法转为List<int>
解决Dart JSON解码时List转List的_CastError问题
问题原因
json.decode解析JSON数组后返回的是List<dynamic>类型,哪怕数组内全是整数,Dart也不允许直接将List<dynamic>强转为List<int>——这两种泛型列表在类型系统中是不兼容的,直接强转就会触发_CastError。
两种可行的修复方案
方案1:使用map+toList逐个转换元素
显式遍历列表元素,将每个dynamic类型的元素转为int,再生成新的List<int>:
scheduledTimes: (json['scheduledTimes'] as List).map((e) => e as int).toList(),
方案2:使用List.castFrom类型转换
利用Dart内置的List.castFrom方法,直接将List<dynamic>转换为List<int>:
scheduledTimes: List.castFrom<dynamic, int>(json['scheduledTimes'] as List),
修正后的完整代码示例
import 'package:equatable/equatable.dart'; class Obj extends Equatable { final List<int> scheduledTimes; final bool active; const Obj({ required this.scheduledTimes, required this.active, }); factory Obj.fromJson(Map<String, dynamic> json) { return Obj( // 二选一替换即可 scheduledTimes: (json['scheduledTimes'] as List).map((e) => e as int).toList(), active: json['active'] as bool, ); } Map<String, dynamic> toJson() { return { 'scheduledTimes': scheduledTimes, 'active': active, }; } @override List<Object?> get props => [scheduledTimes, active]; }
额外注意事项
如果JSON数组中可能存在非整数类型的元素,建议在转换时增加类型判断,避免触发新的类型错误,示例:
scheduledTimes: (json['scheduledTimes'] as List) .map((e) => e is int ? e : 0) // 非int元素默认设为0,可根据需求调整 .toList(),
内容的提问来源于stack exchange,提问作者cmjordan
相关产品推荐
相关产品推荐

