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

加载Youtube视频列表时报错List<dynamic>无法赋值给Iterable<Video>如何解决

错误原因
  • addAll() 方法返回值为void,仅会修改调用它的列表实例本身,不会返回新的列表,你将addAll()的执行结果赋值给List<Video>类型的allVideos属于语法错误。
  • 接口返回的moreVideos是List<dynamic>类型,没有做类型转换直接传入addAll()方法,不符合参数要求的Iterable<Video>类型,触发类型不匹配报错。
修复方案

你需要先将moreVideos中的每一个动态类型元素转换为Video类型的实例,再完成列表拼接,两种常用写法如下:

写法1:生成新列表赋值(无副作用)

_loadMoreVideos() async {
  _isLoading = true;
  List moreVideos = await APIService.instance
      .fetchVideosFromPlaylist(playlistId: _channel.uploadPlaylistId);
  // 转换dynamic元素为Video实例,根据你的项目实际转换逻辑调整Video.fromJson部分
  List<Video> convertedVideos = moreVideos.map((e) => Video.fromJson(e)).toList();
  // 拼接原有视频和新视频
  List<Video> allVideos = [..._channel.videos, ...convertedVideos];
  setState(() {
    _channel.videos = allVideos;
  });
  _isLoading = false;
}

写法2:直接修改原有列表(简化写法)

如果你不需要额外保留拼接前的原有视频列表,可以直接调用原有列表的addAll方法更新:

_loadMoreVideos() async {
  _isLoading = true;
  List moreVideos = await APIService.instance
      .fetchVideosFromPlaylist(playlistId: _channel.uploadPlaylistId);
  List<Video> convertedVideos = moreVideos.map((e) => Video.fromJson(e)).toList();
  setState(() {
    _channel.videos.addAll(convertedVideos);
  });
  _isLoading = false;
}
注意事项

如果你的Video类没有fromJson构造方法,请替换为你项目中实际将接口返回的Map数据转换为Video实例的逻辑即可。

内容的提问来源于stack exchange,提问作者ashish rana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:45:02