Daehan Lim

Header Project Icon

FilmMind - Movie Information App

πŸ“ Overview

πŸ“Œ App Introduction: Movie information and recommendation app using TMDB API
πŸ•’ Duration: May 13, 2025 ~ May 15, 2025 (3 days)
πŸ“± Platform: Flutter cross-platform app (iOS, Android)
πŸ‘₯ Team Size: 1 developer (solo project)
πŸ’Ό Role: Entire app design and development, API integration, performance optimization
πŸ› οΈ Key Technologies: Flutter Dart TMDB API Riverpod Clean Architecture Dio GitHub Actions Hero Animation Shimmer
πŸ”— GitHub: daehan-lim/flutter-film-mind-app

1 home screen 7 home scroll screen 3 detail screen 4 detail loading screen 5 detail scroll 1 screen 6 detail scroll 2 screen 2 home loading screen 8 Naver screen 9 Google screen

πŸ“– Project Description

FilmMind is a Flutter mobile app that displays movie information across multiple categories including now playing, popular movies, top-rated films, and upcoming releases using the TMDB API. The app uses Clean Architecture with MVVM pattern, features smooth Hero Animations between screens, and includes Google/Naver search integration for additional movie details.

πŸ› οΈ Tech Stack

Flutter Dart Riverpod Clean Architecture MVVM Dio TMDB API GitHub Actions Cached Network Image Shimmer URL Launcher Flutter Dotenv Flutter SVG

πŸ“‹ Project Structure

β”œβ”€β”€ app/                               # App-wide settings, constants, and themes  
β”‚   β”œβ”€β”€ constants/                     # App constant definitions  
β”‚   β”‚   β”œβ”€β”€ app_colors.dart            # Color constants  
β”‚   β”‚   β”œβ”€β”€ app_constants.dart         # General app constants  
β”‚   β”‚   └── app_styles.dart            # Style definitions  
β”‚   └── theme.dart                     # App theme configuration  

β”œβ”€β”€ core/                              # Core functionality and utilities  
β”‚   β”œβ”€β”€ exceptions/                    # App-wide exception classes  
β”‚   β”‚   └── data_exceptions.dart       # Data-related exception classes  
β”‚   β”œβ”€β”€ extensions/                    # Extension method definitions  
β”‚   β”‚   β”œβ”€β”€ date_extensions.dart       # Date-related extension methods  
β”‚   β”‚   └── number_extensions.dart     # Number-related extension methods  
β”‚   β”œβ”€β”€ providers/                     # Common providers  
β”‚   β”‚   └── repository_providers.dart  # Repository providers  
β”‚   └── utils/                         # Utility functions  
β”‚       β”œβ”€β”€ navigation_util.dart       # Navigation utilities  
β”‚       β”œβ”€β”€ snackbar_util.dart         # Snackbar utilities  
β”‚       └── dialogue_util.dart         # Dialog utilities  

β”œβ”€β”€ data/                              # Data layer and data access  
β”‚   β”œβ”€β”€ data_source/                   # Data source classes 
β”‚   β”œβ”€β”€ dto/                           # Data Transfer Objects 
β”‚   └── repository/                    # Repository implementations 

β”œβ”€β”€ domain/                            # Business logic and entities  
β”‚   β”œβ”€β”€ entity/                        # Domain entities 
β”‚   β”œβ”€β”€ repository/                    # Repository interfaces
β”‚   └── usecase/                       # Use cases 

β”œβ”€β”€ presentation/                      # UI layer  
β”‚   β”œβ”€β”€ pages/                         # App screens  
β”‚   β”‚   β”œβ”€β”€ home/                      # Home screen  
β”‚   β”‚   β”‚   β”œβ”€β”€ home_page.dart         # Home page widget  
β”‚   β”‚   β”‚   β”œβ”€β”€ home_view_model.dart   # Home screen view model  
β”‚   β”‚   β”‚   └── widgets/               # Home screen widgets 
β”‚   β”‚   └── detail/                    # Detail screen 
β”‚   └── widgets/                       # Common widgets 

└── main.dart                          # App entry point  

🌟 Implementation & Achievements

Clean Architecture-Based App Structure

TMDB API Integration and Movie Data Processing

UI/UX and Animation Features

Comprehensive Unit Testing

GitHub Actions CI Pipeline

Development Best Practices

🌱 Problem Solving

1. Hero Animation Tag Duplication Conflict

// Updated Hero tag generation
Hero(
  tag: 'movie-image-${movie.id}-$categoryName',
  child: AppCachedImage(imageUrl: movie.getPosterUrl()),
)

2. TMDB API Key Security Management in GitHub Actions

- name: Create .env file
  run: |
    echo "TMDB_BEARER_TOKEN=$" > .env

- name: Install dependencies
  run: flutter pub get

- name: Run tests
  run: flutter test

🎞️ Video

Watch the Video