类型错误:UserModel无法赋值给Iterable<UserData>参数解决
解决类型错误:UserModel无法赋值给Iterable
这个错误的核心是List.addAll()方法要求传入可迭代的UserData对象集合,但你直接传了整个UserModel实例,类型完全不匹配。
先看ReqRes接口的返回结构,它的JSON外层包含元数据,真正的用户列表嵌套在data字段里:
{ "page": 2, "per_page": 6, "total": 12, "total_pages": 2, "data": [ {"id": 7, "email": "michael.lawson@reqres.in", ...}, ... ] }
你的UserModel类里应该有一个List<UserData> data字段,用来解析这个用户列表。现在修改你的代码:
- 把方法返回值改为
Future<List<UserData>>(原来的Future<void>无法传递数据,毫无意义) - 解析JSON得到
UserModel实例后,取它的data字段(这才是符合要求的Iterable<UserData>类型)
修改后的完整代码:
import 'dart:convert'; import 'package:http/http.dart' as http; import 'package:internetconnectivityusingbloc/repos/user_model.dart'; class UserRepositories { Future<List<UserData>> getUsers() async { String urlEndPoint = "https://reqres.in/api/users?page=2"; final response = await http.get(Uri.parse(urlEndPoint)); if (response.statusCode == 200) { final UserModel userModel = UserModel.fromJson(response.body); return userModel.data; // 如果需要维护本地列表,也可以这么写: // List<UserData> userData = []; // userData.addAll(userModel.data); // return userData; } else { throw Exception(response.reasonPhrase ?? '请求失败'); } } }
额外优化点:
- 删掉了重复导入的
dart:convert(一次带别名一次不带,冗余) - 移除了无意义的重复初始化
userData = [];
内容的提问来源于stack exchange,提问作者Mahmudul Hasan Shetu
相关产品推荐
相关产品推荐

