runSharedPrefGenerator function
Future<void>
runSharedPrefGenerator(
{ - bool? verbose,
})
Implementation
Future<void> runSharedPrefGenerator({bool? verbose}) async {
final start = DateTime.now();
final config = await _loadConfig();
final filePath = config['path'] as String?;
final rootDir = p.join(Directory.current.path, 'lib');
final entity = filePath != null ? File(p.join(rootDir, filePath)) : Directory(rootDir);
if (!entity.existsSync()) {
print('🚫 Target ${entity is File ? 'File' : 'Directory'} not found: ${entity.path}');
return;
}
print('🔎 Scanning for classes with @sharedPref annotation in ${entity.path} ...');
List<String> generated = [];
final files = _collectDartFiles(entity);
final collection = AnalysisContextCollection(includedPaths: [rootDir]);
for (final context in collection.contexts) {
for (final filePath in files) {
if (filePath.endsWith('.g.dart')) continue;
final result = await _parseFile(context, filePath);
if (result == null) continue;
final sharedPrefClasses = _findSharedPrefClasses(result.unit);
for (final classDecl in sharedPrefClasses) {
final fields = _extractFields(classDecl);
if (fields.isEmpty) continue;
final out = await _generateAndWriteFile(filePath, classDecl.name.lexeme, fields);
generated.add(out);
}
}
}
final duration = DateTime.now().difference(start);
if (generated.isEmpty) {
print('🚫 No classes found with @sharedPref annotation in ${entity.path}');
} else {
print('✅ Generated ${generated.length} file(s) in ${duration.inMilliseconds}ms');
print('📦 Generated files:');
print(generated.join(' - \n'));
}
}