Loading...
Loading...
App Flavors, Environment Config & Build Variants
npx skill4agent add dhruvanbhalara/skills flutter-configdevstagingprodmain.dart--dart-define-from-fileflutter run --flavor dev --dart-define-from-file=config/dev.json
flutter run --flavor staging --dart-define-from-file=config/staging.json
flutter run --flavor prod --dart-define-from-file=config/prod.jsonmain_dev.dartmain_staging.dartmain_prod.dartconfig/config/
├── dev.json
├── staging.json
└── prod.jsonconfig/dev.json{
"FLAVOR": "dev",
"BASE_URL": "https://api-dev.example.com",
"APP_NAME": "MyApp Dev",
"ENABLE_LOGGING": "true",
"ENABLE_CRASHLYTICS": "false"
}flutter_secure_storageconfig/*.json.gitignore// lib/main.dart
void main() {
const flavor = String.fromEnvironment('FLAVOR', defaultValue: 'dev');
AppConfig.init(flavor: Flavor.fromString(flavor));
runApp(const App());
}String.fromEnvironment('KEY')bool.fromEnvironment('KEY')Flavorsealed class Flavor { dev, staging, prod }AppConfigAppConfigbaseUrlenableLoggingenableCrashlyticsappName--dart-define-from-fileflutter_secure_storageflavorDimensionsproductFlavorsandroid/app/build.gradleflavorDimensions "environment"
productFlavors {
dev { dimension "environment"; applicationIdSuffix ".dev"; resValue "string", "app_name", "MyApp Dev" }
staging { dimension "environment"; applicationIdSuffix ".staging"; resValue "string", "app_name", "MyApp Staging" }
prod { dimension "environment"; resValue "string", "app_name", "MyApp" }
}ios/Runner.xcodeprojgoogle-services.jsonGoogleService-Info.plistflutterfire configure--project# Development
flutter run --flavor dev --dart-define-from-file=config/dev.json
# Staging
flutter run --flavor staging --dart-define-from-file=config/staging.json
# Production release
flutter build appbundle --flavor prod --dart-define-from-file=config/prod.json --release
flutter build ipa --flavor prod --dart-define-from-file=config/prod.json --release--flavor--dart-define-from-filemain.dart