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

如何使用免费公开RapidAPI并在Flutter应用中调用IMDb替代电影数据库API

按ID/标题查询电影的Flutter调用方案

接口基础规则

请求URL规则

基础请求地址为 https://movie-database-imdb-alternative.p.rapidapi.com/,通过不同查询参数实现不同查询逻辑:

  • 按电影标题查询:添加查询参数 t=你的电影名称
  • 按IMDB ID查询:添加查询参数 i=目标IMDB ID

其他通用可选参数:

  • r=json 指定返回格式为JSON
  • type=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.com
  • x-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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:57:01