Flavor & Environment di Flutter: dev/staging/prod

Flavor & Environment di Flutter: dev/staging/prod


Tujuan: memisahkan konfigurasi dev/staging/prod agar build, log, endpoint, ikon, dan bundle ID tidak saling bertabrakan.


1) Konsep Inti

  • Flavor: label build berbeda (dev/staging/prod) dengan paket/app id unik.
  • Variabel lingkungan: nilai runtime (base URL, feature flags) via --dart-define.

2) Android Setup

android/app/build.gradle (ringkas):

android {
    defaultConfig { applicationId "com.example.app" }

    flavorDimensions "env"
    productFlavors {
        dev { dimension "env"; applicationIdSuffix ".dev"; versionNameSuffix "-dev" }
        staging { dimension "env"; applicationIdSuffix ".stg"; versionNameSuffix "-stg" }
        prod { dimension "env" }
    }
}

App name per flavor (android/app/src/dev/res/values/strings.xml):

<resources>
  <string name="app_name">MyApp Dev</string>
</resources>

Ulangi folder dev, staging, prod sesuai kebutuhan (ikon, strings, xml).


3) iOS Setup

Di Xcode, buat scheme/target terpisah atau gunakan satu target dengan konfigurasi berbeda.

  • Duplicate scheme: Dev, Staging, Prod.
  • Set Bundle Identifier unik per konfigurasi (mis. com.example.app.dev).
  • Sesuaikan Display Name di Info.

Atau gunakan flutter_flavorizr untuk generator otomatis (opsional).


4) Variabel via --dart-define

Contoh akses di Dart:

const baseUrl = String.fromEnvironment('BASE_URL', defaultValue: 'https://api.dev.local');

Perintah build/run:

flutter run --flavor dev -t lib/main_dev.dart --dart-define BASE_URL=https://api.dev.local
flutter build apk --flavor staging --dart-define BASE_URL=https://api.stg.local
flutter build appbundle --flavor prod --dart-define BASE_URL=https://api.example.com

Pisahkan entrypoint lib/main_dev.dart, lib/main_staging.dart, lib/main_prod.dart bila butuh konfigurasi bootstrap berbeda (logging, Sentry DSN, dsb.).


5) Ikon & Nama Aplikasi per Flavor

Gunakan flutter_launcher_icons untuk menghasilkan ikon berbeda per flavor atau jalur manual di platform masing-masing. Jaga konsistensi nama dan ikon untuk mencegah salah install.


6) CI Integrasi

Tambahkan matriks flavor di GitHub Actions dan pasang --flavor + --dart-define sesuai environment. Simpan secret sensitif (API keys) sebagai GitHub Secrets.


Ringkasan

Dengan flavor dan variabel lingkungan, Anda mendapat pemisahan build yang aman, memudahkan QA dan rilis bertahap, serta menghindari konflik package id antar build.

💬 Komentar

Real-time

⏳ Memuat komentar...

Tulis Komentar

Email tidak akan ditampilkan

0/2000 karakter

⚠️ Catatan: Komentar akan dimoderasi sebelum ditampilkan. Mohon bersikap sopan dan konstruktif.