Flutter ile geliştirilmiş, kullanıcıların film listesini görüntüleyebildiği, favorilere ekleyebildiği ve profil yönetimi yapabildiği modern bir mobil uygulamadır.
Clean Architecture + MVVM + BLoC state management prensipleriyle geliştirilmiştir.
- Kullanıcı kayıt ve giriş işlemleri
- Oturum tokenının güvenli bir şekilde saklanması
- Kayıtlı oturumun korunması ve uygulamaya giriş yapılması
- Başarılı giriş sonrası otomatik ana sayfa yönlendirmesi
- Sonsuz kaydırma (Infinite Scroll) ile film listesi
- Her sayfada 5 film gösterimi
- Otomatik yükleme göstergesi
- Pull-to-refresh desteği
- Favori film ekleme/çıkarma işlemlerinde anlık UI güncellemesi
- Kullanıcı bilgilerini görüntüleme
- Favori filmler listesi
- Profil fotoğrafı yükleme özelliği
- Bottom Navigation Bar ile sayfalar arası geçiş
- Ana sayfa state yönetimi ve korunması
- Navigation Service ile merkezi yönlendirme yönetimi (
auto_route)
- Custom Theme desteği (renk, yazı tipi, boyutlandırma)
- Responsive UI (
flutter_screenutil) - Animasyon implementasyonları (Lottie vs.)
- easy_localization ile çoklu dil desteği
- Türkçe ve İngilizce dil desteği
- Dinamik dil değiştirme özelliği
- Firebase Crashlytics → Crash ve hata takibi
- Logger Service → Gelişmiş log yönetimi (
logger) - Splash Screen ve uygulama ikonları (
flutter_native_splash,icons_launcher) - Güvenli token yönetimi (
shared_preferences+ cache layer)
Uygulama Clean Architecture ve MVVM prensiplerine uygun olarak geliştirilmiştir.
Katmanlar şu şekilde yapılandırılmıştır:
└── 📁lib
├── 📁core
│ ├── 📁base
│ ├── 📁cache
│ ├── 📁constants
│ ├── 📁enums
│ ├── 📁env
│ ├── 📁exception
│ ├── 📁extension
│ ├── 📁init
│ │ └── 📁language
│ │ └── 📁cubit
│ ├── 📁network
│ ├── 📁router
│ ├── 📁theme
│ ├── 📁util
│ │ ├── 📁constants
│ │ ├── 📁dialogs
│ │ ├── 📁model
│ │ │ └── 📁network
│ │ └── 📁space
│ └── 📁widget
├── 📁domain
│ └── 📁entity
├── 📁feature
│ ├── 📁home
│ │ ├── 📁cubit
│ │ ├── 📁model
│ │ ├── 📁service
│ │ └── 📁view
│ ├── 📁login
│ │ ├── 📁cubit
│ │ ├── 📁model
│ │ ├── 📁service
│ │ └── 📁view
│ ├── 📁movies
│ │ ├── 📁cubit
│ │ ├── 📁model
│ │ ├── 📁service
│ │ └── 📁view
│ ├── 📁profile
│ │ ├── 📁cubit
│ │ ├── 📁model
│ │ ├── 📁service
│ │ └── 📁view
│ ├── 📁register
│ │ ├── 📁cubit
│ │ ├── 📁model
│ │ ├── 📁service
│ │ └── 📁view
│ ├── 📁splash
│ │ └── 📁view
│ └── 📁upload_photo
│ ├── 📁cubit
│ ├── 📁model
│ └── 📁view
├── 📁injection
└── main.dart
+-----------------------+
| Presentation |
|-----------------------|
| View (Widget, Page) |
| ViewModel (Cubit/Bloc)|
| UI Widgets |
+-----------▲-----------+
|
|
+-----------▼-----------+
| Domain |
|-----------------------|
| Entities |
| UseCases |
| Repository Interfaces |
+-----------▲-----------+
|
|
+-----------▼-----------+
| Data |
|-----------------------|
| Repository Impl. |
| Remote Data Sources |
| Local Data Sources |
+-----------------------+
- Presentation Layer → UI, Bloc/Cubit, ViewModel
- Domain Layer → İş kuralları, UseCase, Entity, Repository interface
- Data Layer (Core + Feature) → Repository implementasyonları, API & Cache işlemleri
| Paket | Açıklama |
|---|---|
| flutter_bloc | State management |
| equatable | Model karşılaştırma kolaylığı |
| dio | HTTP istekleri |
| flutter_native_splash | Splash ekran |
| icons_launcher | Uygulama ikonları |
| get_it | Dependency Injection (DI) |
| injectable | DI code generator |
| auto_route | Otomatik route yönetimi |
| json_annotation / json_serializable | Model serileştirme |
| logger | Loglama |
| lottie | Animasyonlar |
| shared_preferences | Local storage |
| infinite_scroll_pagination | Sonsuz kaydırma |
| envied | Ortam değişkenleri |
| flutter_screenutil | Responsive tasarım |
| kartal | Extension yardımcıları |
| image_picker | Fotoğraf seçimi |
| flutter_svg | SVG desteği |
| cached_network_image | Görsellerin cache’lenmesi |