You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter JSON转Model时出现Null与Map类型不兼容错误,如何定位问题参数?

Flutter JSON转Model时出现Null与Map类型不兼容错误,如何定位问题参数?

嗨,我刚处理过几乎一模一样的问题,一眼就能帮你定位到问题所在!

先看错误信息的关键提示

你的错误栈已经把问题点得明明白白了:

Unhandled Exception: type 'Null' is not a subtype of type 'Map<String, dynamic>'
#0 new GtaEmitirSearchResponseModel.fromJson (package:gta/features/gta_emitir/data/models/gta_search/gta_emitir_search_response_model.dart:90:59)

直接跳到你fromJson方法的第90行,就能锁定是**rebanho字段的转换逻辑出了问题**。

问题根源:JSON结构和代码层级不匹配

我们对比一下Postman返回的JSON和你的代码:

  • Postman里的rebanho是直接的嵌套Map:
"rebanho": {
  "idGrupo": 4,
  "totalFemeaAcima6Meses": 1,
  "totalFemea": 1,
  "totalExtenso": "um equino"
}
  • 但你的代码里却多套了一层GtaRebanhoWSVO:
rebanho: GtaEmitirFlockModel.fromJson(map['rebanho']['GtaRebanhoWSVO']),

JSON里根本没有GtaRebanhoWSVO这个key,所以map['rebanho']['GtaRebanhoWSVO']会返回null,而GtaEmitirFlockModel.fromJson()要求传入非null的Map<String, dynamic>,这就触发了类型转换错误。

修复方案

把rebanho的转换代码改成直接使用map['rebanho'],同时加上防御性判断避免后续null问题:

rebanho: map['rebanho'] != null 
    ? GtaEmitirFlockModel.fromJson(map['rebanho']) 
    : GtaEmitirFlockModel(), // 或者根据你的业务需求给默认值

通用排查技巧(以后碰到类似问题直接用)

  • 优先看错误栈行号:Dart的错误栈会精准定位到报错的代码行,直接跳过去就能锁定可疑字段
  • 对比JSON和Model结构:把Postman的JSON格式化后,和Model的转换代码逐字段对照,嵌套对象最容易出现层级错误
  • 临时打印调试:在可疑代码前加debugPrint(map['可疑字段'].toString()),看实际拿到的JSON值是什么,快速验证猜想
  • 添加null防御:对于所有嵌套对象的转换,都加上null判断,避免后端返回null时崩溃

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 13:23:02