A modern and user-friendly movie discovery application. Explore popular films, access detailed information, and keep track of your favorite movies.
Note: This project was developed as part of a study case provided during a job application process for the BOBYAI company. In addition to the required features, extra functionalities were also implemented.
To watch the demo video of the application click here. Alternatively, you can also watch it via Google Drive.
- Movie Discovery: Discover popular and up-to-date movies using the TMDB API
- Category-Based Search: Filter movies by genres
- Search Functionality: Easily find the movies you're looking for
- Movie Details: Access in-depth information, posters, and images of each movie
- Favorite Movies: Add the movies you like to your favorites
- Personalization: Choose your favorite genres and movies during onboarding
- Subscription Model: Different subscription plans for pro features
- Infinite Scroll Movie List: Smooth, scrollable movie listings
In addition to the core features required by the case, the following enhancements have been implemented in the project:
- SearchView: A comprehensive search screen that allows searching the entire movie database
- Onboarding Animations: Stunning animations and transition effects in the genre selection screen
- Pro Badge: Visual indicators to highlight premium users
- Detailed Movie Page (MovieView): A comprehensive screen containing full details of the selected movie
- Posters/images of the movie
- Cast information
- Director details
- IMDb rating and vote count
- Movie duration and release date
- Detailed movie description
- Visual Enhancements: Animations and transitions to enrich the user experience
- Performance Optimizations: Fast loading times and a smooth user experience
Some challenges encountered during the development process:
- Onboarding Movie List: The case requirement was to display movie posters rotating along the inner surface of a circular path. In the current implementation, the movie list rotates on the outer side of a circular path. This limitation was due to the constraints of Flutter's ListWheelScrollView widget configuration.
- Flutter – UI development framework
- MobX – Reactive state management
- GetIt – Dependency injection
- Dio – For HTTP requests
- TMDB API – For movie data
- SharedPreferences – Local data storage
- GoRouter – Navigation and routing
- Cached Network Image – Image caching for improved performance
lib/
├── app/
│ ├── common/ # General configurations
│ │ ├── config/ # API configurations
│ │ ├── constants/ # Constants such as colors and texts
│ │ ├── functions/ # Global helper functions
│ │ ├── get_it/ # Dependency injection setup
│ │ ├── router/ # Route configuration
│ │ └── widgets/ # Shared widgets
│ │
│ └── features/ # Feature-based folders
│ ├── data/ # Data layer
│ │ ├── datasources/ # Data sources (local, remote)
│ │ ├── models/ # Data models
│ │ └── repositories/ # Repository implementations
│ │
│ └── presentation/ # UI layer
│ ├── home/ # Home screen
│ ├── movie/ # Movie details
│ ├── onboarding/# Onboarding screens
│ ├── paywall/ # Paywall & subscriptions
│ └── search/ # Search screen
│
├── core/ # Core components
│ ├── assets/ # Asset manager
│ ├── dio_manager/ # HTTP request manager
│ ├── extensions/ # Extensions
│ ├── keys/ # Key values
│ ├── result/ # Result wrapper classes
│ └── widgets/ # Core widgets
│
└── main.dart # App entry point
The application is built following Clean Architecture principles:
- 📦 Repository Pattern: To abstract data sources
- ⚙️ MobX: For reactive state management
- 🧩 Dependency Injection: Managed via GetIt as a service locator
- 📁 Feature-First Structure: Organized by feature folders
- 🧭 Onboarding: Allows users to select favorite genres and movies
- Animated genre selection screen
- Infinite scroll movie selection list
- 🏠 Home: Recommended movies and categories
- Pro user badge
- Genre-based filtering
- 🎬 Movie Details: Rich information about the selected movie
- Image gallery
- Cast list
- Technical details and reviews
- 🔍 Search: Advanced movie search functionality
- Instant search results
- Filtering options
- 💳 Subscription: Unlock pro features with payment plans
- Weekly, monthly, and annual plans
- Free trial option
- Feature comparison chart
- Install the Flutter SDK: Flutter Installation Guide
- Clone the project:
git clone https://github.com/develonursahin/bobyai_sc.git - Install dependencies:
flutter pub get - Run the MobX code generator:
flutter pub run build_runner build --delete-conflicting-outputs - Add your TMDB API key:
Edit the file located atlib/app/common/config/config.dartand insert your API key. - Run the application:
flutter run
This project is licensed under the MIT License.
Modern ve kullanıcı dostu bir film keşif uygulaması. Popüler filmleri keşfedin, detaylı bilgilere erişin ve favori filmlerinizi takip edin.
Not: Bu proje, BOBYAI şirketinin iş başvurusu sürecinde verilen bir study case olarak geliştirilmiştir. Case kapsamında istenen özelliklerin yanı sıra ek özellikler de projeye dahil edilmiştir.
Uygulamanın demo videosunu izlemek için buraya tıklayın.
Alternatif olarak Google Drive üzerinden de izleyebilirsiniz.
- Film Keşfi: TMDB API ile popüler ve güncel filmleri keşfedin
- Kategori Bazlı Arama: Film türlerine göre filtreleme yapın
- Arama Özelliği: İstediğiniz filmleri kolayca bulun
- Film Detayları: Filmlerin ayrıntılı bilgilerine, afişlerine ve görsellerine erişin
- Favori Filmler: Beğendiğiniz filmleri favorilerinize ekleyin
- Kişiselleştirme: Başlangıçta favori türlerinizi ve filmlerinizi seçin
- Abonelik Modeli: Pro özellikler için farklı abonelik paketleri
- Sonsuz Dönen Film Listesi: Kaydırmalı film listesi
Case kapsamında istenen temel özelliklerin yanı sıra, aşağıdaki ek geliştirmeler projeye dahil edilmiştir:
- SearchView: Kapsamlı bir arama ekranı ile tüm film veritabanında arama yapabilme
- Onboarding Animasyonları: Tür seçme ekranında çarpıcı animasyonlar ve geçiş efektleri
- Pro Etiketi: Premium kullanıcıları belirten görsel etiketler
- Detaylı Film Sayfası (MovieView): Filmlerin tüm detaylarını içeren kapsamlı bir ekran
- Film afişleri/görselleri
- Oyuncu kadrosu
- Yönetmen bilgisi
- İMDB puanı ve oylama bilgileri
- Film süresi ve çıkış tarihi
- Detaylı film açıklaması
- Görsel İyileştirmeler: Kullanıcı deneyimini zenginleştiren animasyonlar ve geçişler
- Performance Optimizasyonları: Hızlı yükleme ve pürüzsüz kullanıcı deneyimi
Geliştirme sürecinde karşılaşılan bazı zorluklar:
- Onboarding Film Listesi: Case gereksinimlerinde film afişlerinin bir çemberin iç yüzüne bakar şekilde dönmesi istenmiştir. Mevcut uygulamada, film listesi dıştan dönen bir çember şeklinde uygulanabilmiştir. Flutter'ın ListWheelScrollView widget'ının yapılandırması bu kısıtlamaya neden olmuştur.
- Flutter - UI geliştirme framework'ü
- MobX - Durumu yönetmek için reaktif state management
- GetIt - Bağımlılık enjeksiyonu
- Dio - HTTP istekleri için
- TMDB API - Film verileri için
- SharedPreferences - Yerel veri depolama
- GoRouter - Navigasyon ve rota yönetimi
- Cached Network Image - Görüntü önbelleğe alma
lib/
├── app/
│ ├── common/ # Genel yapılandırmalar
│ │ ├── config/ # API konfigürasyonları
│ │ ├── constants/ # Renkler, metinler gibi sabitler
│ │ ├── functions/ # Genel fonksiyonlar
│ │ ├── get_it/ # Bağımlılık enjeksiyonu
│ │ ├── router/ # Rota yapılandırması
│ │ └── widgets/ # Ortak widget'lar
│ │
│ └── features/ # Özellik bazlı klasörler
│ ├── data/ # Veri katmanı
│ │ ├── datasources/ # Veri kaynakları (yerel, uzak)
│ │ ├── models/ # Veri modelleri
│ │ └── repositories/ # Repository'ler
│ │
│ └── presentation/ # UI katmanı
│ ├── home/ # Ana sayfa
│ ├── movie/ # Film detayları
│ ├── onboarding/# Başlangıç ekranı
│ ├── paywall/ # Ödeme duvarı
│ └── search/ # Arama ekranı
│
├── core/ # Temel bileşenler
│ ├── assets/ # Varlık yöneticisi
│ ├── dio_manager/ # HTTP istek yöneticisi
│ ├── extensions/ # Uzantılar
│ ├── keys/ # Anahtar değerler
│ ├── result/ # Sonuç sınıfları
│ └── widgets/ # Temel widget'lar
│
└── main.dart # Uygulama giriş noktası
Uygulama, Temiz Mimari (Clean Architecture) prensiplerini takip ederek geliştirilmiştir:
- Repository Pattern: Veri kaynaklarını soyutlamak için
- MobX: Reaktif state management için
- Dependency Injection: GetIt ile servis lokasyonu
- Feature-First Organization: Özellik bazlı dosya organizasyonu
- Onboarding: Kullanıcıların favori türlerini ve filmlerini seçmesi
- Animasyonlu tür seçim ekranı
- Sonsuz dönen film listesi seçim ekranı
- Ana Sayfa: Önerilen filmler ve kategoriler
- Pro kullanıcı rozeti
- Kategori bazlı filtreleme
- Film Detayları: Film hakkında ayrıntılı bilgiler
- Film görselleri galerisi
- Oyuncu kadrosu listesi
- Teknik bilgiler ve değerlendirmeler
- Arama: Gelişmiş film arama özelliği
- Anında sonuç gösterme
- Filtreleme seçenekleri
- Abonelik: Pro özellikleri açmak için ödeme planları
- Haftalık, aylık ve yıllık paketler
- Ücretsiz deneme seçeneği
- Özellik karşılaştırması
- Flutter SDK'yı yükleyin: Flutter Kurulumu
- Projeyi klonlayın:
git clone https://github.com/develonursahin/bobyai_sc.git - Bağımlılıkları yükleyin:
flutter pub get - MobX kod oluşturucuyu çalıştırın:
flutter pub run build_runner build --delete-conflicting-outputs - TMDB API anahtarınızı ekleyin:
lib/app/common/config/config.dartdosyasını düzenleyin ve API anahtarınızı ekleyin. - Uygulamayı çalıştırın:
flutter run
Bu proje MIT lisansı altında lisanslanmıştır.





