Use when configuring build flavors, passing environment variables via dart-define-from-file, or setting up stage-specific credentials.
64
77%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./skills/flutter/flutter-config/SKILL.mddev, 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.xcodeproj.Podfile changes are required for SPM. Ensure all dependency overrides are defined under Package Dependencies inside Xcode Runner project settings.google-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 flavora74a6fb
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.