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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 10:06:03