Skip to content

fourhadd/Country-Explorer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🌍 Country Explorer

Rest Countries API üzərindən dünyadakı ölkələr haqqında ətraflı məlumatları gətirən, vizual olaraq zəngin, oflayn rejim dəstəkli və yüksək performanslı Flutter tətbiqi. Layihə proqram təminatının arxitektura standartlarına tam uyğun olaraq Clean Architecture (Təmiz Arxitektura) prinsipləri və BLoC/Cubit state management pattern-i tətbiq edilərək qurulmuşdur.


🚀 Öncə Çıxan Özəlliklər və Refaktor Həlləri

  • ⚡ GetStorage ilə Sürətli Keşləmə (Offline Mode): Ölkə siyahısı API-dən cəmi bir dəfə yüklənir və növbəti açılışlarda birbaşa GetStorage daxili yaddaşından 0ms gecikmə ilə oxunur. Tətbiq tamamilə internetsiz (offline) mühitdə belə problemsiz işləyir.
  • ⏱️ Donmayan Sürətli Axtarış (Debouncing): 250-dən çox ölkə içində axtarış panelinə hər hərf yazıldıqda baş verən prosessor donmalarının (jank) qarşısını almaq üçün 400ms Debounce mexanizmi qurulmuşdur.
  • 🛡️ Yarış Şəraitinin (Race Condition) və Dövlət Asılılığının Həlli: Səhifələr arası keçid edərkən köhnə datanın ekranda asılı qalması qüsuru kökündən həll edilmişdir. DetailPage tamamilə Stateless struktura gətirilmiş və yeni səhifəyə keçid anında clearSelectedCountry() metodu vasitəsilə Cubit state-i avtomatik sıfırlanır.
  • 🔗 İnteraktiv Sərhədlər və Ada Ölkəsi Mühafizəsi: Ölkələrin landşaft qonşularına (borders) klikləyərək dərhal eyni səhifədə növbəti ölkənin detalına asinxron keçid imkanı yaradılmışdır. Sərhədi olmayan ada ölkələri üçün xüsusi boş vəziyyət (empty state) idarəetməsi əlavə olunub.
  • 🚀 GPU və Yaddaş (Memory) Optimizasiyası: * RegionFilterSectionCountryContentList daxilindəki sürüşdürmə fizikaları (BouncingScrollPhysics) static const səviyyəsinə qaldırılaraq lazımsız obyekt yaradılması (GC pressure) əngəllənib.
    • RandomCountryFab daxilində Random generatoru statik edilib.
    • Siyahı rəndirlənməsində performans artışı üçün ValueKey əvəzinə obyekt səviyyəli ObjectKey tətbiq olunub.
  • 🎨 Təmiz Mobil Fokuslu UI Dizayn: Widget-lar daxilindəki bütün lazımsız metod parçalanmaları ləğv edilərək müstəqil widget siniflərinə daşınmış, hardcoded rənglər və ölçülər const ifadələri və ScreenUtil elementləri ilə optimallaşdırılmışdır.
  • 🔢 Rəqəm Formatlama (RegEx): Əhali sayısı kimi böyük rəqəmlərin oxunurluğunu artırmaq üçün xüsusi RegEx süzgəci vasitəsilə avtomatik vergüllərlə ayrılma mexanizmi.

🏗️ Layihə Arxitekturası və Fayl Strukturu

Tətbiq daxilində kod təkrarının qarşısını almaq, test edilə bilənliyi artırmaq və modulluğu təmin etmək üçün Clean Architecture modelinin 3 əsas qatı (Data, Domain, Presentation) tətbiq olunmuşdur:

lib/
├── app/
│   └── app.dart                 # Tətbiqin əsas giriş nöqtəsi və MaterialApp marşrutları
├── core/                        # Tətbiq daxilində ortaq istifadə olunan infrastruktur
│   ├── constants/
│   │   └── api_constants.dart   # API linkləri, endpoints və mərkəzi region siyahısı
│   ├── di/
│   │   └── injection_container.dart # Get_It və GetStorage ilə asılılıqların qeydiyyatı
│   ├── error/
│   │   └── failures.dart        # Tətbiq daxili xəta sinifləri və Dio exception idarəediciləri
│   ├── network/
│   │   ├── interceptors/
│   │   │   ├── error_interceptor.dart   # Qlobal şəbəkə xətalarını tutan filter
│   │   │   └── logging_interceptor.dart # Konsolda API sorğularını izləyən interceptor
│   │   └── dio_client.dart      # Dio paketinin xüsusi konfiqurasiya olunmuş müştərisi
│   ├── theme/
│   │   └── app_colors.dart      # Dizaynda istifadə olunan mərkəzi rəng palitrası
│   └── widgets/
│       └── search_bar.dart      # Ortaq istifadə edilə bilən xüsusi axtarış paneli
└── features/
    └── country/                 # Ölkə (Country) Modulu
        ├── data/                # DATA QATI: Xam məlumatların idarə edilməsi
        │   ├── datasources/
        │   │   ├── country_local_data_source.dart  # GetStorage ilə lokal keşləmə mənbəyi
        │   │   └── country_remote_data_source.dart # API-yə birbaşa sorğu atan uzaq mənbə
        │   ├── models/
        │   │   └── country_model.dart # JSON mapping və entity-yə (.toEntity()) çevirmə
        │   └── repositories/
        │       └── country_repository_impl.dart # Lokal və Uzaq mənbəni birləşdirən mərkəz
        ├── domain/              # DOMAIN QATI: Biznes qaydaları (Tamamilə müstəqil qat)
        │   ├── entities/
        │   │   └── country_entity.dart # UI-ın tanıdığı təmiz biznes obyekti (capitals List daxil)
        │   ├── repositories/
        │   │   └── country_repository.dart # İnterfeys təyinləri
        │   └── usecases/
        │       ├── get_countries_usecase.dart      # Ölkələri gətirmək üçün biznes ssenarisi
        │       └── get_country_detail_usecase.dart # Detalları gətirmək üçün biznes ssenarisi
        └── presentation/        # PRESENTATION QATI: İstifadəçi interfeysi və vəziyyət idarəsi
            ├── cubit/
            │   ├── country_cubit.dart # UI-dan gələn əmrləri və state təmizləməni (clearSelectedCountry) icra edən məntiq
            │   └── country_state.dart # Ekranın vəziyyətləri (Loading, Success, Error)
            ├── pages/
            │   ├── detail_page.dart   # Race Condition-dan təmizlənmiş, tamamilə Stateless detal ekranı
            │   └── home_page.dart     # Ana səhifə (Mobil fokuslu, performanslı struktur)
            └── widgets/               # Parçalanmış və optimizasiya olunmuş kiçik widget-lar
                ├── border_countries_section.dart # Kliklənə bilən, Wrap dizaynlı qonşu sərhədlər section-ı
                ├── country_card_widget.dart     # List daxilində rəndir olunan, keçid anında state sıfırlayan kart
                ├── country_content_list.dart    # ObjectKey dəstəkli və sabit scroll fizikalı list widget-i
                ├── country_info_section.dart
                ├── custom_app_bar.dart
                ├── custom_search_bar.dart       # Daxili rendering yükü azaldılmış axtarış paneli
                ├── detail_app_bar.dart
                ├── hero_image_banner.dart
                ├── info_tile_item.dart
                ├── random_country_fab.dart      # Statik Random instansiyası istifadə edən FAB düyməsi
                └── region_filter_section.dart   # Sabit fizikalı və const rəng keçidli üfüqi filter bölməsi

About

Country Explorer: A high-performance Flutter app exploring world countries using Rest Countries API. Built with Clean Architecture, BLoC/Cubit, GetStorage for 0ms offline caching, debounce searching, and fully optimized Stateless UI

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors