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

