Flutter使用json_table解析REST API数据时出现List类型转换报错
报错成因
- 接口返回的根级JSON为包含
budgets字段的对象,并非直接返回预算列表数组,若直接将jsonDecode的整体结果强转为List,首先会出现结构不匹配问题 jsonDecode默认解析得到的列表元素为dynamic类型,无法通过整体强转直接转换为List<Map<String, dynamic>>,这是触发类型转换报错的直接原因
修复步骤
- 先将接口响应体的JSON内容解析为根级
Map<String, dynamic>对象 - 从根Map中提取
budgets字段对应的原始列表(该列表类型为List<dynamic>) - 对原始列表逐元素完成类型转换,将每个元素强制转为
Map<String, dynamic>,得到符合JsonTable组件入参要求的列表
核心修正代码:
if (response.statusCode == 200) { // 解析根级JSON对象 final rootJson = jsonDecode(response.body) as Map<String, dynamic>; // 提取budgets列表并逐元素完成类型转换 final tableData = (rootJson['budgets'] as List<dynamic>) .map((item) => item as Map<String, dynamic>) .toList(); setState(() { _data = tableData; }); }
关键注意点
- 不能直接对
List<dynamic>类型的原始列表做整体类型强转,Dart的强类型校验不会自动遍历列表元素完成子类型匹配,必须通过映射操作逐元素完成类型cast - 需保证
budgets列表中的每个元素都是键值对结构,否则传入JsonTable后依然会触发渲染异常
内容的提问来源于stack exchange,提问作者ProRetoque Photo
相关产品推荐
相关产品推荐

