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
相关产品推荐
相关产品推荐

