FLUTTER ECOSYSTEM

bizz84/tmdb_movie_app_riverpod

Riverpod(TMDB API)を使用したFlutter映画アプリ

tmdb_movie_app_riverpod のプロジェクト画像
Stars
272
Forks
51
最終プッシュ(UTC)
2024/05/15
プロジェクト状態
公開中
Andrea Bizzotto GitHub avatar
GITHUB User

Andrea Bizzotto ↗

Flutter GDE ❖ Creator of codewithandrea.com ❖ YouTube: nnbd.me/yt ❖ Complete Dart Course: nnbd.me/dart

https://codewithandrea.comLondon公式サイト ↗
言語DartC++CMakeRubyHTMLCSwiftKotlinShellObjective-C

技術トピック

使用している依存関係

依存関係一覧 19 件

ランキング

元の README

以下は英語原文のスナップショットです。最新版は GitHub をご覧ください。

README を開く / 閉じる

Flutter Movies app with Riverpod (TMDB API)

This is an improved version of my old movies app based on the latest Riverpod 2.0 APIs.

Movies app preview

Motivation

I built this app to showcase the latest APIs for popular packages such as Riverpod and GoRouter.

This is not meant to be a complete movies app, yet it should implement common use cases and features. 👇

Current Features

  • Infinite scrolling with pagination
  • Pull to refresh
  • Search functionality
  • Loading UI with the Shimmer package
  • Stateful nested routing with StatefulShellRoute

Here's a detailed tutorial explaining how the pagination and search UI works:

Planned Features (no promises 😅)

  • Favourites
  • Responsive UI

Packages in use

App Architecture & Folder structure

The project follows my Riverpod app architecture with a feature-first project structure.

More details here:

It also uses the new Riverpod Generator package, which I have covered here:

Getting a TMDB API Key and Running the Project

This project uses the TMDB API to get the latest movies data.

Before running the app, you need to sign up on the TMDB website, then obtain an API key on the settings API page.

Once you have this, create an .env file at the root of the project and add your key:

// .env
TMDB_KEY=your-api-key

Then, run the code generator:

dart run build_runner build -d

This will generate a env.g.dart file inside lib/env. This contains the tmdbApiKey that is used when making requests to the TMDB API.

Congratulations, you're good to go. 😎

Note: Loading images from insecure HTTP endpoints

The data returned by the TMBD API points to image URLs using http rather than https. For the images to load correctly, the following changes have been made:

Android

Created a file at android/app/src/main/res/xml/network_security_config.xml with these contents:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

Added this to the application tag in the AndroidManifest.xml:

android:networkSecurityConfig="@xml/network_security_config"
iOS

Add the following to ios/Runner/info.pList:

  <key>NSAppTransportSecurity</key>
  <dict>
      <key>NSAllowsArbitraryLoads</key>
      <true/>
  </dict>

More information here:

macOS

Since macOS applications are sandboxed by default, we get a SocketException if we haven't added the required entitlements. This has been fixes by adding these lines to macos/Runner/DebugProfile.entitlements and macos/Runner/Release.entitlements:

<key>com.apple.security.network.client</key>
<true/>

More info here:

LICENSE: MIT