updateMainDiFile static method
Implementation
static Future<void> updateMainDiFile({
required String featureName,
required String packageName,
String? ownFeaturesName,
bool? isSub = false,
}) async {
final nameCab = featureName.toCapitalized().toCapitalizeSecondWord();
final targetFile = File('lib/core/di/configure_dependencies.dart');
if (!targetFile.existsSync()) {
print('❌ Error: configure_dependencies.dart file not found');
return;
}
String content = targetFile.readAsStringSync();
final importPath = isSub == true && ownFeaturesName == null
? '/sub'
: (ownFeaturesName != null ? '/$ownFeaturesName/sub' : '');
final importStatement =
"import 'package:$packageName/features$importPath/$featureName/di/${featureName}_di.dart';";
final initMethodName = isSub == true ? 'Sub' : '';
final initMethodOwner = ownFeaturesName != null
? 'For${ownFeaturesName.toCapitalized().toCapitalizeSecondWord()}'
: '';
final initStatement =
" configure$nameCab$initMethodName$initMethodOwner(getIt);";
// Prevent duplication
if (content.contains(initStatement)) {
print('✅ DI for $nameCab is already added.');
return;
}
// Inject Import
if (!content.contains(importStatement)) {
final lastImportIndex = content.lastIndexOf('import ');
if (lastImportIndex != -1) {
final endOfLastImportLine = content.indexOf('\n', lastImportIndex);
content = content.replaceRange(
endOfLastImportLine,
endOfLastImportLine,
'\n$importStatement',
);
} else {
content = '$importStatement\n$content';
}
}
// Inject the initialization function before the last closing bracket of the method
final functionSignature = 'Future<void> configureDependencies() async {';
final startIndex = content.indexOf(functionSignature);
if (startIndex != -1) {
final endIndex = content.indexOf('}', startIndex);
if (endIndex != -1) {
final before = content.substring(0, endIndex);
final after = content.substring(endIndex);
content = '$before $initStatement\n$after';
} else {
print('❌ Error: Closing bracket } not found!');
return;
}
} else {
print('❌ Error: configureDependencies() method not found in the file!');
return;
}
targetFile.writeAsStringSync(content);
print(
'🚀 configure$nameCab injected successfully into configure_dependencies.dart',
);
}