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

Flutter API转Object Model报错:Result无法返回为Future<List<Result>?>

解决Flutter中TMDB API模型转换的类型不匹配问题

错误根源

你的getData方法声明返回Future<List<Result>?>,但实际返回了单个Result对象,导致类型不兼容。

修正步骤

1. 对齐API响应结构

TMDB的热门电影响应是一个包含results数组的顶层对象,示例结构:

{
"page": 1,
"results": [{"id": 123, "title": "示例电影", ...}, ...],
"total_pages": 100
}

2. 修正getData方法逻辑

不要直接解析单个Result,先将整个响应解析为MovieTredningModel,再提取其中的results列表返回:

Future<List<Result>?> getData() async {
  try {
    final response = await http.get(Uri.parse('https://api.themoviedb.org/3/trending/movie/day?api_key=你的API密钥'));
    if (response.statusCode == 200) {
      // 先解析为顶层模型
      final trendingModel = MovieTredningModel.fromJson(jsonDecode(response.body));
      // 返回results列表
      return trendingModel.results;
    }
    return null;
  } catch (e) {
    print(e);
    return null;
  }
}

3. 确保MovieTredningModel正确映射字段

检查模型的fromJson方法,确保正确将results字段转换为List<Result>:

class MovieTredningModel {
  final int page;
  final List<Result> results;
  final int totalPages;

  MovieTredningModel({
    required this.page,
    required this.results,
    required this.totalPages,
  });

  factory MovieTredningModel.fromJson(Map<String, dynamic> json) {
    return MovieTredningModel(
      page: json['page'] as int,
      // 将JSON数组转为Result对象列表
      results: (json['results'] as List).map((item) => Result.fromJson(item as Map<String, dynamic>)).toList(),
      totalPages: json['total_pages'] as int,
    );
  }
}

4. 排查错误返回逻辑

如果你之前的代码是直接返回单个Result.fromJson(...),这就是错误的根源,必须替换为返回列表的逻辑。

内容的提问来源于stack exchange,提问作者DAni M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:55:32