Configure app flavors (dev, staging, prod) with environment-specific settings via dart-define-from-file. Use when setting up build variants, per-flavor Firebase projects, or platform-specific configuration.
68
82%
Does it follow best practices?
Impact
—
No eval scenarios have been run
Passed
No known issues
dev, staging, prodmain.dart entry point for all flavors--dart-define-from-file:
flutter 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.dart, main_staging.dart, main_prod.dart entry pointsconfig/ directory at project root:
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 to .gitignore if they contain any environment-specific secrets; otherwise commit them for team convenience// lib/main.dart
void main() {
const flavor = String.fromEnvironment('FLAVOR', defaultValue: 'dev');
AppConfig.init(flavor: Flavor.fromString(flavor));
runApp(const App());
}String.fromEnvironment('KEY') or bool.fromEnvironment('KEY')Flavor enum: sealed class Flavor { dev, staging, prod }AppConfig is a singleton holding flavor, base URL, feature flags, and Firebase configAppConfig class:
baseUrl — API endpoint per environmentenableLogging — verbose logging for dev onlyenableCrashlytics — disabled in devappName — display name per flavor (e.g., "MyApp Dev", "MyApp")--dart-define-from-file — NO hardcoded per-flavor logic in Dart codeflutter_secure_storage or CI-injected env varsflavorDimensions and productFlavors in android/app/build.gradle:
flavorDimensions "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.json (Android) and GoogleService-Info.plist (iOS) in flavor-specific directoriesflutterfire configure with --project flag for each environment# 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 and --dart-define-from-file explicitlymain.dart — NEVER create separate entry points per flavor62354b9
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.