generateExtension function
String
generateExtension(
- Map<
String, EnvVariable> variables, - List<
String> allEnvFiles, - ProjectConfig config
Implementation
String generateExtension(Map<String, EnvVariable> variables, List<String> allEnvFiles, ProjectConfig config) {
final buffer = StringBuffer();
buffer.writeln('// GENERATED CODE - DO NOT MODIFY BY HAND');
buffer.writeln('// Generated on: ${DateTime.now().toIso8601String()}');
buffer.writeln('// Variables: ${variables.length} from ${allEnvFiles.length} environment files');
buffer.writeln();
buffer.writeln('import \'package:flutter_environment_config/flutter_environment_config.dart\';');
buffer.writeln();
// Generate the Generation class
buffer.writeln('/// Type-safe access to environment variables through code generation.');
buffer.writeln('/// This class provides static-only access and cannot be instantiated.');
buffer.writeln('abstract class FlutterEnvironmentConfigGeneration {');
buffer.writeln(' // Private constructor to prevent instantiation');
buffer.writeln(' FlutterEnvironmentConfigGeneration._();');
buffer.writeln();
// Generate getters for each environment variable
for (final variable in variables.values) {
final getterName = generateGetterName(variable.key);
final returnType = variable.type;
// Generate file availability comment
final availableFiles = variable.availableInFiles
.map((f) => f.split('/').last.replaceAll('.example', ''))
.toList()..sort();
final allFileNames = allEnvFiles
.map((f) => f.split('/').last.replaceAll('.example', ''))
.toList();
final missingFiles = allFileNames
.where((f) => !availableFiles.contains(f))
.toList();
buffer.writeln(' /// Gets the value of ${variable.key} environment variable.');
buffer.writeln(' /// Available in: ${availableFiles.join(', ')}');
if (missingFiles.isNotEmpty) {
buffer.writeln(' /// Missing in: ${missingFiles.join(', ')}');
}
buffer.writeln(' /// Returns null if not set or invalid.');
buffer.writeln(' static $returnType? get $getterName {');
if (returnType == 'bool') {
buffer.writeln(' final value = FlutterEnvironmentConfig.get(\'${variable.key}\');');
buffer.writeln(' return value?.toLowerCase() == \'true\';');
} else if (returnType == 'int') {
buffer.writeln(' final value = FlutterEnvironmentConfig.get(\'${variable.key}\');');
buffer.writeln(' return value != null ? int.tryParse(value) : null;');
} else if (returnType == 'double') {
buffer.writeln(' final value = FlutterEnvironmentConfig.get(\'${variable.key}\');');
buffer.writeln(' return value != null ? double.tryParse(value) : null;');
} else {
// String type
buffer.writeln(' return FlutterEnvironmentConfig.get(\'${variable.key}\');');
}
buffer.writeln(' }');
buffer.writeln();
}
// Generate constants for environment variable keys
buffer.writeln(' // Environment variable keys');
for (final variable in variables.values) {
final constantName = generateConstantName(variable.key);
buffer.writeln(' static const String $constantName = \'${variable.key}\';');
}
buffer.writeln('}');
return buffer.toString();
}