Movie Vault – your ultimate destination for discovering and exploring your favorite movies and TV shows!
I built this app to implement what I've learned about Flutter and challenge myself to further improve my skills.
There are still tech debts 👇 to implement later as I learn more about Flutter, yet it should have implemented common features.
- Recommendations
- List Movies (Now Playing, Popular, Top Rated, Upcoming)
- List TV Series (Airing Today, On The Air, Popular, Top Rated)
- Credits
- Reviews
- Search
- Watch List
- Authentication with Email & Password
- Reset Password
- Refactoring Project Structure, improve Feature-First with DDD
- UX Watch List
- current: refresh all data
- expected: live update
- Error dialog user friendly
- Verification email account
- Link multiple account
- Store watch list in remote db
- Settings Menu
- Dark Mode
- Dio
- Go Router
- Shimmer
- Animation
- flutter_riverpod and riverpod_generator for data caching (and much more!)
- freezed for JSON serialization
- http for networking
- sqflite for local database
- firebase_auth for authentication
- cloud_firestore for remote database
- envied for handling API keys
- cached_network_image for caching images
- google_fonts for font styling
- flutter_native_splash for handling splash screen
- Intl for date, time formatting
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-keyThen, 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. 😎
To use this project with Firebase, follow these steps:
- Create a new project with the Firebase console
- Enable Firebase Authentication, along with the Email/Password Authentication Sign-in provider in the Firebase Console (Authentication > Sign-in method > Email/Password > Edit > Enable > Save)
- Enable Cloud Firestore
Then, follow one of the two approaches below. 👇
Make sure you have the Firebase CLI and FlutterFire CLI installed.
Then run this on the terminal from the root of this project:
- Run
firebase loginso you have access to the Firebase project you have created - Run
flutterfire configureand follow all the steps
For more info, follow this guide:
If you don't want to use FlutterFire CLI, follow these steps instead:
- Register separate iOS, Android, and web apps in the Firebase project settings.
- On Android, use
com.example.movie_vaultas the package name. - then, download and copy
google-services.jsonintoandroid/app. - On iOS, use
com.example.movie_vaultas the bundle ID. - then, download and copy
GoogleService-Info.plistintoiOS/Runner, and add it to the Runner target in Xcode.
That's it. Have fun!
