调用Curriculum API获取数据时遇TypeError:Null无法转为Map<String,dynamic>求助
调用Curriculum API时遇到_TypeError:Null不是Map<String, dynamic>的子类型
问题详情
调用Curriculum API获取数据时触发异常:_TypeError(类型'Null'不是类型'Map<String, dynamic>'的子类型),调用代码如下:
static Future<Kurikulum> getDetailHeader(String id) async { String url = Constant.baseURL; String token = await UtilSharedPreferences.getToken(); final response = await http.get( Uri.parse( '$url/auth/mhs_siakad/kurikulum/detail/$id', ), headers: { 'Authorization': 'Bearer $token', }, ); print(response.statusCode); print(response.body); if (response.statusCode == 201) { final result = json.decode(response.body) as Map<String, dynamic>; Data detailKurikulum = Data.fromJson(result['data']['kurikulum']); Kurikulum l = detailKurikulum.mk as Kurikulum; return l; } else { throw Exception(); } }
问题原因
- 直接访问嵌套字段
result['data']['kurikulum'],未做null校验,若接口返回的data或kurikulum字段为null、缺失,会触发类型转换错误。 - 仅判断状态码为201,忽略了接口可能返回的其他成功状态码(如200),导致合法响应被误判为失败。
- 异常处理过于笼统,无法定位具体错误原因。
修复方案
增加null安全校验,扩大成功状态码范围,优化异常信息:
static Future<Kurikulum> getDetailHeader(String id) async { String url = Constant.baseURL; String token = await UtilSharedPreferences.getToken(); final response = await http.get( Uri.parse('$url/auth/mhs_siakad/kurikulum/detail/$id'), headers: {'Authorization': 'Bearer $token'}, ); print(response.statusCode); print(response.body); // 校验所有成功状态码(200-299) if (response.statusCode >= 200 && response.statusCode < 300) { final result = json.decode(response.body) as Map<String, dynamic>; // 逐层校验字段,避免null直接传入fromJson final data = result['data'] as Map<String, dynamic>?; final kurikulumRawData = data?['kurikulum'] as Map<String, dynamic>?; if (kurikulumRawData == null) { throw Exception('接口返回的kurikulum数据为空或格式不符'); } Data detailKurikulum = Data.fromJson(kurikulumRawData); Kurikulum l = detailKurikulum.mk as Kurikulum; return l; } else { throw Exception('请求失败,状态码:${response.statusCode}'); } }
额外建议
- 查看打印的
response.body,确认接口实际返回的JSON结构是否符合预期,重点检查data.kurikulum字段是否存在且为Map类型。 - 确保
Data和Kurikulum模型类支持null安全,内部解析逻辑添加空值处理。 - 推荐使用
json_serializable库自动生成模型类,减少手动解析的错误概率。
内容的提问来源于stack exchange,提问作者Meikisihka
相关产品推荐
相关产品推荐

