detectProjectConfig function
Detect project context and determine output configuration Returns null if not a valid consumer project
Implementation
Future<ProjectConfig?> detectProjectConfig() async {
final currentDir = Directory.current.path;
// Check if we're in a Flutter project (has pubspec.yaml)
final pubspecFile = File('$currentDir/pubspec.yaml');
if (await pubspecFile.exists()) {
final pubspecContent = await pubspecFile.readAsString();
final pubspec = loadYaml(pubspecContent) as Map;
// Check if we're running from within the library itself - reject this case
final libDir = Directory('$currentDir/lib');
if (await libDir.exists()) {
final mainFile = File('$currentDir/lib/flutter_environment_config.dart');
if (await mainFile.exists()) {
// We're in the library project - don't generate here
return null;
}
}
// Check if this project uses flutter_environment_config
final dependencies = pubspec['dependencies'] as Map?;
final devDependencies = pubspec['dev_dependencies'] as Map?;
final usesThisLibrary =
dependencies?.containsKey('flutter_environment_config') == true ||
devDependencies?.containsKey('flutter_environment_config') == true;
if (usesThisLibrary) {
// This is a consumer project
final outputDir = _getOutputDirFromPubspec(pubspec);
return ProjectConfig(
workingDir: currentDir,
outputPath: '$currentDir/$outputDir/flutter_environment_config.g.dart',
);
}
// If root project doesn't have flutter_environment_config, search in packages
final configFromPackages = await _findConfigInPackages(currentDir);
if (configFromPackages != null) {
return configFromPackages;
}
}
// Not a valid consumer project
return null;
}