Flutter中从API获取JSON填充LapsUser列表报错求助
Flutter从REST API获取JSON填充LapsUser列表类型错误解决方法
你遇到的Map<String, dynamic>无法赋值给LapsUser类型的错误,核心原因是没有将API返回的JSON数据转换成自定义的LapsUser对象,直接把Map类型数据塞进了需要LapsUser类型的列表中。按以下步骤修复:
1. 给LapsUser类添加JSON转对象的构造函数
在sql_laps_user_class.dart中,为LapsUser类实现fromJson工厂构造函数,负责把API返回的Map数据转换成LapsUser实例:
class LapsUser { final int id; final String username; // 根据你的业务需求定义其他字段 LapsUser({required this.id, required this.username}); // 核心:从JSON Map转换为LapsUser对象 factory LapsUser.fromJson(Map<String, dynamic> json) { return LapsUser( id: json['id'], // 注意这里的键名要和API返回的JSON字段完全一致 username: json['username'], // 其他字段同理,一一对应API返回的键名 ); } }
2. 修改API请求后的解析逻辑
把原本直接添加Map的代码,改成通过fromJson转换后再添加到列表:
// 错误写法(导致类型不匹配) // users.add(item); // 正确写法 List<LapsUser> lapsUsers = []; final response = await http.get(Uri.parse('你的云端API地址')); if (response.statusCode == 200) { List<dynamic> jsonList = jsonDecode(response.body); for (var jsonItem in jsonList) { // 将每个Map<String, dynamic>转换为LapsUser对象再加入列表 lapsUsers.add(LapsUser.fromJson(jsonItem)); } }
3. 检查字段匹配与空值处理
- 确认
fromJson里的键名和API返回的JSON字段完全一致,比如API返回user_name就不能写json['username'],否则会出现空值或转换错误。 - 如果API返回的字段可能为空,要添加空值兜底,比如
username: json['username'] ?? '未知用户',或者将类属性设为可空类型String? username。
内容的提问来源于stack exchange,提问作者Massimiliano Longo
相关产品推荐
相关产品推荐

