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

类型错误: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字段,用来解析这个用户列表。现在修改你的代码:

  1. 把方法返回值改为Future<List<UserData>>(原来的Future<void>无法传递数据,毫无意义)
  2. 解析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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:00:59