如何使用免费公开RapidAPI并在Flutter应用中调用IMDb替代电影数据库API
按ID/标题查询电影的Flutter调用方案
接口基础规则
请求URL规则
基础请求地址为 https://movie-database-imdb-alternative.p.rapidapi.com/,通过不同查询参数实现不同查询逻辑:
- 按电影标题查询:添加查询参数
t=你的电影名称 - 按IMDB ID查询:添加查询参数
i=目标IMDB ID
其他通用可选参数:
r=json指定返回格式为JSONtype=movie可筛选返回类型为电影,排除剧集、短视频等内容
示例按标题查询复联4的完整URL:https://movie-database-imdb-alternative.p.rapidapi.com/?t=Avengers%20Endgame&r=json
请求头要求
两个请求头为必传项,不可缺失:
x-rapidapi-host:固定值为movie-database-imdb-alternative.p.rapidapi.comx-rapidapi-key:填写你自己获取到的有效API密钥
修正后的Flutter实现代码
你原来的代码错误点在于把完整带参数的URL填到了Uri.https的第一个参数位置,该参数仅需填写域名,路径和查询参数需要分开传入,修正后代码如下:
import 'dart:convert'; import 'package:http/http.dart' as http; class APIService { // 替换为你自己的API密钥 static const String _apiKey = "你的实际API密钥"; // 仅保留域名部分 static const String _baseDomain = "movie-database-imdb-alternative.p.rapidapi.com"; // 固定请求头 static const Map<String, String> _headers = { "x-rapidapi-key": _apiKey, "x-rapidapi-host": _baseDomain, }; // 按电影标题查询 Future<dynamic> getMovieByTitle(String title) async { Uri uri = Uri.https(_baseDomain, "", { "t": title, "r": "json", }); return _sendRequest(uri); } // 按IMDB ID查询 Future<dynamic> getMovieById(String imdbId) async { Uri uri = Uri.https(_baseDomain, "", { "i": imdbId, "r": "json", }); return _sendRequest(uri); } // 通用请求封装 Future<dynamic> _sendRequest(Uri uri) async { final response = await http.get(uri, headers: _headers); if (response.statusCode == 200) { final result = json.decode(response.body); // 可在这里提前判断接口返回的查询是否成功,比如返回Response为False的情况 if (result["Response"] == "False") { throw Exception(result["Error"]); } return result; } else { throw Exception('请求失败,状态码:${response.statusCode}'); } } }
数据渲染示例
调用接口拿到返回数据后,可直接取出对应字段渲染,例如获取电影名称、海报、上映年份:
// 调用示例 void fetchMovie() async { try { var movieData = await APIService().getMovieByTitle("Avengers Endgame"); String movieName = movieData["Title"]; String posterUrl = movieData["Poster"]; String year = movieData["Year"]; // 后续将这些字段传入Widget即可渲染,海报可以用Image.network(posterUrl)展示 } catch (e) { print(e.toString()); } }
内容的提问来源于stack exchange,提问作者Srk2k14
相关产品推荐
相关产品推荐

