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

Flutter中如何将_Map<String,dynamic>转换为自定义Model

正确转换_Map<String,dynamic>到LoginResponseModel的方法

先分析你两个报错的原因

  • 第一个错误:你用了response.map(...)并转成列表,但response本身是单个_Map<String,dynamic>对象,不是列表/Iterable,map方法是用于遍历集合的,这里完全不适用,所以出现类型匹配报错。
  • 第二个错误:jsonDecode的参数需要是JSON格式的字符串,但你的response已经是解析后的Map对象,再传入jsonDecode自然会报类型不匹配的错误。

正确的转换方式

直接将已有的Map对象传入LoginResponseModel.fromjson构造函数即可,代码如下:

// 假设response就是你从API获取的_Map<String,dynamic>数据
LoginResponseModel loginModel = LoginResponseModel.fromjson(response);

可选优化:规范构造函数命名(建议)

Dart中通常将JSON解析构造函数命名为fromJson(首字母大写J),同时可以增加空值处理,避免late变量未初始化导致崩溃:

class LoginResponseModel {
  bool success;
  int status;
  String message;
  Map<String, dynamic> user;
  String token;

  LoginResponseModel({
    required this.success,
    required this.status,
    required this.message,
    required this.user,
    required this.token,
  });

  // 规范命名+空值容错写法
  LoginResponseModel.fromJson(Map<String, dynamic> json) :
    success = json['success'] ?? false,
    status = json['status'] ?? 0,
    message = json['message'] ?? '',
    user = json['user'] ?? {},
    token = json['token'] ?? '';
}

使用优化后的构造函数:

LoginResponseModel loginModel = LoginResponseModel.fromJson(response);

内容的提问来源于stack exchange,提问作者Shady Hesham

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 15:22:05