generateFeature method
Implementation
Future<void> generateFeature(String name) async {
final snakeName = templateGenerator.toSnakeCase(name);
final isBloc = templateGenerator.config.defaultStateManager == 'bloc';
// Create directory structure based on state manager
final dirs = [
'lib/features/$snakeName/data/datasources',
'lib/features/$snakeName/data/models',
'lib/features/$snakeName/data/repositories',
'lib/features/$snakeName/domain/entities',
'lib/features/$snakeName/domain/repositories',
'lib/features/$snakeName/domain/usecases',
'lib/features/$snakeName/presentation/pages',
'lib/features/$snakeName/presentation/bindings',
];
// Add state manager specific directories
if (isBloc) {
dirs.add('lib/features/$snakeName/presentation/bloc');
} else {
dirs.add('lib/features/$snakeName/presentation/controllers');
}
for (final dir in dirs) {
await ensureDirectoryExists(dir);
}
// Generate common files
final files = <String, String>{
'lib/features/$snakeName/domain/entities/${snakeName}_entity.dart':
templateGenerator.generateEntity(name),
'lib/features/$snakeName/data/models/${snakeName}_model.dart':
templateGenerator.generateModel(name),
'lib/features/$snakeName/domain/repositories/${snakeName}_repository.dart':
templateGenerator.generateRepositoryInterface(name),
'lib/features/$snakeName/data/repositories/${snakeName}_repository_impl.dart':
templateGenerator.generateRepositoryImplementation(name),
'lib/features/$snakeName/data/datasources/${snakeName}_remote_data_source.dart':
templateGenerator.generateDataSource(name),
'lib/features/$snakeName/domain/usecases/${snakeName}_usecase.dart':
templateGenerator.generateUseCase(name),
'lib/features/$snakeName/presentation/pages/${snakeName}_page.dart':
templateGenerator.generatePage(name),
'lib/features/$snakeName/presentation/bindings/${snakeName}_binding.dart':
templateGenerator.generateBinding(name),
};
// Add state manager specific files
if (isBloc) {
files['lib/features/$snakeName/presentation/bloc/${snakeName}_bloc.dart'] =
templateGenerator.generateController(name);
files['lib/features/$snakeName/presentation/bloc/${snakeName}_event.dart'] =
templateGenerator.generateBlocEvent(name);
files['lib/features/$snakeName/presentation/bloc/${snakeName}_state.dart'] =
templateGenerator.generateBlocState(name);
} else {
files['lib/features/$snakeName/presentation/controllers/${snakeName}_controller.dart'] =
templateGenerator.generateController(name);
}
for (final entry in files.entries) {
await writeFile(entry.key, entry.value);
}
print('✅ Generated feature "$name" with files:');
for (final filePath in files.keys) {
print(' - $filePath');
}
}