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

Flutter类型错误:List<dynamic>无法转为List<TeamID>求助

Flutter类型转换错误:List无法转为List

从接口获取数据后,尝试将数据存入List<TeamID>类型的teamslist列表时,抛出类型转换错误:_TypeError (type 'List<dynamic>' is not a subtype of type 'List<TeamID>')。

错误代码示例

class TeamsController with ChangeNotifier {
  List<TeamID> teamslist = [];

  TeamsController() {
    getMyTeams();
  }

  getMyTeams() async {
    var response = await ApiService().getMyCreatedTeams();
    if (response != null) {
      final databody = json.decode(response);
      debugPrint(databody['data'].toString());
      // 错误发生在这一行
      teamslist = databody['data'].map((item) => TeamID.fromJson(item)).toList();

      notifyListeners();
    }
  }
}

可行的代码写法

如果先将databody['data']存入普通List变量再转换,即可正常运行:

final List list = databody['data'];
teamslist = list.map((item) => TeamID.fromJson(item)).toList();

问题原因

  • json.decode(response)返回的databody['data']类型为dynamic,直接调用map方法时,Dart无法自动推断出映射后的类型,最终toList()生成的是List<dynamic>,无法直接赋值给List<TeamID>类型的变量。
  • 显式将databody['data']赋值给List类型变量后,Dart会明确其为List<dynamic>,此时map生成的迭代器类型可被正确推断,toList()最终生成List<TeamID>,完成类型匹配。

其他简化写法

除了先转存到普通List,还可以直接通过类型转换或指定泛型来解决:

  1. 强制类型转换:
teamslist = (databody['data'] as List).map((item) => TeamID.fromJson(item)).toList();
  1. 用List.from指定泛型:
teamslist = List<TeamID>.from(databody['data'].map((item) => TeamID.fromJson(item)));

内容的提问来源于stack exchange,提问作者rameez khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:00:54