Flutter电影信息获取插件tmdb_dart的使用

Flutter电影信息获取插件tmdb_dart的使用

Dart TMDB

The Movie DB API Client for Dart v2

示例

要运行示例,首先需要从The Movie Database API 获取您的 api_key。然后可以运行 dart example/main.dart your_api_key 或者在 .vscode/launch.json 配置文件中替换您的 api_key

示例代码

以下是一个完整的示例代码,展示了如何使用 tmdb_dart 插件来获取电影信息。

import 'dart:async';
import 'package:tmdb_dart/tmdb_dart.dart';

Future<void> main(List<String> arguments) async {
  assert(arguments.length == 1);
  TmdbService service = TmdbService(arguments[0]);

  // 自动配置API基于默认配置
  // 或者使用setter 'configuration'自定义配置API
  await service.initConfiguration();

  // 搜索包含 "harry" 的电影
  var pagedResult = await service.movie.search("harry");

  for (var movie in pagedResult.results) {
    print("${movie.title} - ${movie.voteAverage}");
  }

  // 获取今天播出的电视剧
  var pagedTvResult = await service.tv.getAiringToday();

  for (var tv in pagedTvResult.results) {
    print("${tv.name} - ${tv.voteAverage}");
  }

  // 获取热门电影
  var popular = await service.movie.getPopular();

  for (var movie in popular.results) {
    print("${movie.title} - ${movie.voteAverage}");
  }

  // 发现符合特定条件的电影
  var discover = await service.movie.discover(
    settings: MovieDiscoverSettings(
      primaryReleaseDateGTE: Date(day: 15, month: 9, year: 2010),
      primaryReleaseDateLTE: Date(day: 22, month: 10, year: 2015),
      voteAverageGTE: 5.5,
      withPeople: [108916, 7467],
      sortBy: SortBy.popularity.desc,
      quality: QualitySettings.Custom(
        backdropQuality: AssetQuality.High,
        logoQuality: AssetQuality.High,
        posterQuality: AssetQuality.High,
        profileQuality: AssetQuality.High,
        stillQuality: AssetQuality.High,
      ),
    ),
  );

  for (var movie in discover.results) {
    print("${movie.title} - ${movie.voteAverage} - ${movie.releaseDate}");
  }

  // 获取特定电影的详细信息及推荐和相似内容
  var movie = await service.movie.getDetails(671,
      appendSettings: AppendSettings(
        includeRecommendations: true,
        includeSimilarContent: true,
      ));

  print("${movie.recommendations[0].title}");
  print("${movie.similar[0].title}");

  // 获取特定电视剧的详细信息及推荐和相似内容
  var tv = await service.tv.getDetails(1399,
      appendSettings: AppendSettings(
        includeRecommendations: true,
        includeSimilarContent: true,
      ));
  print("${tv.originalName} - ${tv.seasons.length}");
  print("${tv.similar[0].originalName} - ${tv.similar[0].firstAirDate}");

  // 获取国家和地区列表
  print("Countries: ${(await service.getAllCountries()).length}");
  // 获取电影类型列表
  print("MovieGenres: ${(await service.getAllTvGenres()).length}");
}

// 生成许多请求
// 请求数量超过允许的阈值
// 但得益于集成的韧性机制,所有请求都成功完成
Future<void> resilienceExample(TmdbService service) async {
  var futures = Iterable.generate(100)
      .map((x) => service.movie.search(x.toString()))
      .toList();
  await Future.wait(futures);
}

使用说明

  1. 初始化插件

    TmdbService service = TmdbService(apiKey);
    await service.initConfiguration();
    
  2. 搜索电影

    var pagedResult = await service.movie.search("harry");
    
  3. 获取热门电影

    var popular = await service.movie.getPopular();
    
  4. 发现符合特定条件的电影

    var discover = await service.movie.discover(settings: MovieDiscoverSettings(...));
    
  5. 获取电影详细信息及推荐和相似内容

    var movie = await service.movie.getDetails(movieId, appendSettings: AppendSettings(...));
    
  6. 处理大量请求

    var futures = Iterable.generate(100).map((x) => service.movie.search(x.toString())).toList();
    await Future.wait(futures);
    

更多关于Flutter电影信息获取插件tmdb_dart的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter电影信息获取插件tmdb_dart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何使用 tmdb_dart 插件在 Flutter 中获取电影信息的代码案例。tmdb_dart 是一个用于与 The Movie Database (TMDb) API 交互的 Flutter 插件。

首先,确保你已经在 pubspec.yaml 文件中添加了 tmdb_dart 依赖:

dependencies:
  flutter:
    sdk: flutter
  tmdb_dart: ^x.y.z  # 请替换为最新版本号

然后运行 flutter pub get 来获取依赖。

接下来,下面是一个完整的 Flutter 应用示例,它展示了如何使用 tmdb_dart 获取并显示电影信息。

main.dart

import 'package:flutter/material.dart';
import 'package:tmdb_dart/tmdb_dart.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late TmdbClient _tmdbClient;
  late Movie? _movie;
  bool _isLoading = true;

  @override
  void initState() {
    super.initState();
    _tmdbClient = TmdbClient(apiKey: 'YOUR_API_KEY');  // 替换为你的TMDb API Key
    _fetchMovieData(movieId: 550);  // 示例电影ID(例如《Inception》的ID)
  }

  Future<void> _fetchMovieData({required int movieId}) async {
    setState(() {
      _isLoading = true;
    });

    try {
      final movieResponse = await _tmdbClient.movies.getMovieDetails(movieId);
      setState(() {
        _movie = movieResponse;
        _isLoading = false;
      });
    } catch (e) {
      print('Error fetching movie data: $e');
      setState(() {
        _isLoading = false;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter TMDb Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Movie Info'),
        ),
        body: Center(
          child: _isLoading
              ? CircularProgressIndicator()
              : _movie != null
                  ? Column(
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: <Widget>[
                        Text(
                          _movie!.title ?? '',
                          style: TextStyle(fontSize: 24),
                        ),
                        SizedBox(height: 16),
                        Image.network(
                          _movie!.posterPath ?? '',
                          width: 200,
                          height: 300,
                          fit: BoxFit.cover,
                        ),
                        SizedBox(height: 16),
                        Text(
                          _movie!.overview ?? '',
                          style: TextStyle(fontSize: 16),
                        ),
                      ],
                    )
                  : Text('No movie data found.'),
        ),
      ),
    );
  }
}

注意事项

  1. API Key: 替换 'YOUR_API_KEY' 为你从 TMDb 获取的实际 API Key。你可以在 TMDb 开发者页面上注册并获取一个免费的 API Key。

  2. 电影ID: 在 _fetchMovieData 方法中,电影ID 550 是示例 ID(代表电影《Inception》)。你可以根据需要替换为其他电影ID。

  3. 错误处理: 在实际应用中,你可能需要更详细的错误处理逻辑,比如显示错误消息或者重试机制。

  4. UI美化: 根据你的需求,你可以进一步美化 UI,比如添加更多的电影详情、使用不同的布局等。

这个示例展示了如何使用 tmdb_dart 插件获取电影的基本信息,并在 Flutter 应用中显示这些信息。你可以根据需求进一步扩展功能,比如获取电影评论、演员列表等。

回到顶部