如何在Flutter中使用POST方法获取JSON响应并解析到自定义模型
Flutter POST请求返回JSON填充模型失败解决方案
问题根因
错误出在UserInfoModel的fromJson工厂构造方法中:
- 接口返回的
data字段是单个JSON对象,不是JSON数组,你错误调用了map方法遍历转换,这是类型不匹配的核心原因 - 原工厂方法没有处理
json['data']为空的分支,会触发语法警告
修正后的代码
1. 修正 UserInfoModel 类
import 'UserInfoDataModel.dart'; class UserInfoModel { final int success; final UserInfoDataModel? data; // 可选类型兼容data为空的异常场景 UserInfoModel(this.success, this.data); factory UserInfoModel.fromJson(dynamic json) { UserInfoDataModel? data; if (json['data'] != null) { // 直接传入data的Map对象调用子模型fromJson即可,无需map遍历 data = UserInfoDataModel.fromJson(json['data']); } return UserInfoModel(json['success'] as int, data); } @override String toString() { return '{success: $success, data: $data}'; } }
如果你确认接口success=1时data一定非空,也可以把data定义为非空类型,在构造时做非空校验即可。
2. 调用侧取值验证
模型修正后可以直接通过模型实例取值,不需要再从原始返回结果中读取:
if (response.statusCode == 200) { var res = json.decode(response.body); _userInfoModel = UserInfoModel.fromJson(res); if (_userInfoModel.success == 1 && _userInfoModel.data != null) { // 直接从模型对象读取属性即可 print("用户邮箱:${_userInfoModel.data!.email}"); print("用户手机号:${_userInfoModel.data!.phone}"); // 直接给子模型实例赋值 _userInfoDataModel = _userInfoModel.data!; setState(() {}); } }
内容的提问来源于stack exchange,提问作者Rakesh Saini
相关产品推荐
相关产品推荐

