main function
Simple script to generate type-safe environment configuration extension on FlutterEnvironmentConfig. Only runs for consumer projects that import this library.
Implementation
void main(List<String> args) async {
print(_cyan('🔧 Generating FlutterEnvironmentConfig...'));
print('');
// Detect project context and configuration
final projectConfig = await detectProjectConfig();
if (projectConfig == null) {
print(_yellow('⚠️ This command should be run from a project that uses flutter_environment_config.'));
print('');
print('💡 Make sure you have added flutter_environment_config to your pubspec.yaml:');
print(' dependencies:');
print(' flutter_environment_config: ^1.0.0');
return;
}
final workingDirectory = Directory(projectConfig.workingDir);
final outputPath = projectConfig.outputPath;
print(_blue('📋 Configuration:'));
print('📁 Working directory: ${workingDirectory.path}');
print('📄 Output path: $outputPath');
print('');
// Read environment variables from all .env files in the working directory
final envVariables = <String, EnvVariable>{};
final envFiles = await scanEnvFiles(workingDirectory);
if (envFiles.isEmpty) {
print('❌ No .env.* files found in ${workingDirectory.path}');
print('💡 Create .env files like .env.develop, .env.staging, .env.production');
return;
}
print(_yellow('📂 Reading environment files:'));
for (final envFile in envFiles) {
final file = File(envFile);
if (await file.exists()) {
print('📖 Reading $envFile');
final variables = await readEnvFile(file);
for (final entry in variables.entries) {
if (!envVariables.containsKey(entry.key)) {
envVariables[entry.key] = EnvVariable(
entry.value.key,
entry.value.value,
entry.value.type,
{envFile},
);
} else {
// Add this file to the list of files that contain this variable
envVariables[entry.key]!.availableInFiles.add(envFile);
}
}
}
}
if (envVariables.isEmpty) {
print('❌ No environment variables found. Make sure you have .env files.');
return;
}
print('');
print(_magenta('⚙️ Generating code...'));
// Generate the extension
final generatedCode = generateExtension(envVariables, envFiles, projectConfig);
// Write to file
final outputFile = File(outputPath);
await outputFile.parent.create(recursive: true); // Create directories if needed
await outputFile.writeAsString(generatedCode);
print('');
print(_green('✅ Generation completed:'));
print('📊 Generated ${envVariables.length} environment variables');
print('📁 Output: ${outputFile.path}');
print('');
print(_brightYellow('💡 Customize output directory in pubspec.yaml:'));
print(' flutter_environment_config:');
print(' output_dir: lib/generated # or any other directory');
print('');
print(_brightCyan('🎉 Done! You can now use FlutterEnvironmentConfigGeneration.propertyName for type-safe access.'));
}