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
相关产品推荐
相关产品推荐

