detectArchitectureFromProject static method
Future<StateManagementArchitecture?>
detectArchitectureFromProject({
- required Directory root,
- required StateManagement stateManagement,
Implementation
static Future<StateManagementArchitecture?> detectArchitectureFromProject({
required Directory root,
required StateManagement stateManagement,
}) async {
if (stateManagement == StateManagement.getx) return null;
final featuresDir = Directory(path.join(root.path, 'lib', 'features'));
if (!featuresDir.existsSync()) return StateManagementArchitecture.simple;
final entries = featuresDir.listSync().whereType<Directory>();
for (final featureDir in entries) {
final domainDir = Directory(path.join(featureDir.path, 'domain'));
if (domainDir.existsSync()) return StateManagementArchitecture.clean;
final dataRepositories = Directory(
path.join(featureDir.path, 'data', 'repositories'),
);
if (dataRepositories.existsSync())
return StateManagementArchitecture.clean;
}
// Fallback: detect clean providers/usecases in files
if (stateManagement == StateManagement.riverpod) {
final hasUsecase = await _hasTextInLib(root.path, 'Get');
final hasRepository = await _hasTextInLib(root.path, 'Repository');
if (hasUsecase && hasRepository) return StateManagementArchitecture.clean;
}
if (stateManagement == StateManagement.bloc) {
final hasUsecase = await _hasTextInLib(root.path, 'Usecase');
final hasRepository = await _hasTextInLib(root.path, 'Repository');
if (hasUsecase && hasRepository) return StateManagementArchitecture.clean;
}
return StateManagementArchitecture.simple;
}