Skip to content

Repository files navigation

Flutter White-Label Flavors Demo

Tek Flutter kod tabanından iki ayrı markalı uygulama (Green Application & Blue Application).
Mağazada farklı paket kimliği, isim ve launcher ikonu; uygulama içinde farklı tema, logo ve config.

Screenshots

Aynı kod tabanı — farklı flavor ile farklı marka:

White-label demo: Green & Blue flavors

Green Application Blue Application
Green Application Blue Application

HomePage aynı widget; uygulama adı, tema, logo ve config flavor’a göre değişir.

Ne değişiyor?

Alan Green Blue
Uygulama adı Green Application Blue Application
Tema Yeşil (Material 3) Mavi (Material 3)
Logo (UI + launcher) green_logo.png blue_logo.png
Android/iOS paket suffix .greenapplication .blueapplication
Örnek API URL api.green.example.com api.blue.example.com

Mimari

main.dart  ──►  bootstrap.runFromDartDefine()
                    │
                    ▼
              AppFlavor.fromDartDefine()   ←  --dart-define=APP_FLAVOR=...
                    │
                    ▼
              FlavorConfig.create()        ←  Strategy + Registry
                    │
                    ▼
              AppConfig  ──►  App  ──►  HomePage

Native (paralel): --flavor greenapplication → Android productFlavors + iOS scheme / xcconfig.

Proje yapısı

lib/
├── main.dart                      # CI / production girişi
├── main_green_application.dart    # İnce giriş (lokal)
├── main_blue_application.dart
├── bootstrap.dart
├── app/app.dart
├── core/
│   ├── config/
│   │   ├── app_flavor.dart
│   │   ├── app_config.dart
│   │   ├── flavor_config.dart
│   │   └── flavor/                # FlavorDefinition implementasyonları
│   ├── assets/app_assets.dart
│   └── theme/app_theme.dart
└── features/home/presentation/home_page.dart

assets/logo/                       # Uygulama içi logolar
flutter_launcher_icons-*.yaml      # Mağaza ikonları
android/app/build.gradle.kts       # productFlavors
ios/Flutter/*-*.xcconfig           # Bundle ID, display name, AppIcon

Gereksinimler

  • Flutter SDK ^3.11.1
  • Xcode (iOS), Android SDK (Android)

Hızlı başlangıç

flutter pub get
dart run flutter_launcher_icons -f flutter_launcher_icons*

Çalıştırma

CI / production (önerilen)

Tek main.dart + APP_FLAVOR + native --flavor:

# Green
flutter run \
  -t lib/main.dart \
  --flavor greenapplication \
  --dart-define=APP_FLAVOR=greenApplication

# Blue
flutter run \
  -t lib/main.dart \
  --flavor blueapplication \
  --dart-define=APP_FLAVOR=blueApplication

APP_FLAVOR değerleri AppFlavor enum adlarıyla aynı olmalı: greenApplication, blueApplication.

Lokal / IDE (dart-define yok)

flutter run -t lib/main_green_application.dart --flavor greenapplication
flutter run -t lib/main_blue_application.dart --flavor blueapplication

VS Code: .vscode/launch.json içinde hazır konfigürasyonlar var.

Release build

Android (AAB):

flutter build appbundle \
  -t lib/main.dart \
  --flavor greenapplication \
  --dart-define=APP_FLAVOR=greenApplication

Android (APK):

flutter build apk \
  -t lib/main.dart \
  --flavor greenapplication \
  --dart-define=APP_FLAVOR=greenApplication

iOS (IPA):

flutter build ipa \
  -t lib/main.dart \
  --flavor greenapplication \
  --dart-define=APP_FLAVOR=greenApplication

Blue için greenapplication / greenApplication değerlerini blueapplication / blueApplication ile değiştirin.

Native flavors

--flavor (küçük harf) Görünen ad Paket suffix
greenapplication Green Application .greenapplication
blueapplication Blue Application .blueapplication
  • Android: productFlavors + resValue@string/app_name
  • iOS: Scheme greenapplication / blueapplication, AppIcon-{flavor}, APP_DISPLAY_NAME (xcconfig)

--flavor adı Android Gradle ve iOS scheme ile birebir aynı olmalı.

iOS: ikon / isim değişmiyorsa

  1. Runner scheme değil, greenapplication / blueapplication scheme ile çalıştırın.
  2. flutter clean → simülatörden uygulamayı silin → yeniden flutter run.
  3. Flavor Runner build’inde ASSETCATALOG_COMPILER_APPICON_NAME xcconfig’i ezmemeli (AppIcon-greenapplication kullanılır).

Logolar

Dosya Kullanım
assets/logo/green_logo.png UI (HomePage) + launcher kaynağı
assets/logo/blue_logo.png UI + launcher kaynağı
  • UI: FlavorDefinition.logoAssetAppConfigImage.asset
  • Launcher: flutter_launcher_icons
    • flutter_launcher_icons-greenapplication.yaml
    • flutter_launcher_icons-blueapplication.yaml

Logo güncellemesi sonrası:

dart run flutter_launcher_icons -f flutter_launcher_icons*

Yeni flavor ekleme

  1. AppFlavor enum’a yeni değer
  2. lib/core/config/flavor/ altında FlavorDefinition implementasyonu
  3. FlavorConfig._definitions listesine ekle
  4. Android productFlavors { create("...") { ... } }
  5. iOS: build configuration + scheme + *-Debug.xcconfig dosyaları
  6. assets/logo/<marka>_logo.png
  7. flutter_launcher_icons-<flavor>.yaml + icon generate
  8. CI: --flavor <flavor> + --dart-define=APP_FLAVOR=<EnumAdı>

İlgili Yazı

About

Tek Flutter kod tabanından iki markalı uygulama (Green & Blue). Android/iOS flavor, dart-define, launcher ikonları ve portfolio demo ekranı.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages