runCreateFeature function

void runCreateFeature(
  1. String name
)

Generates a full module with clean architecture Structure:

  • view (screens + widgets)
  • data (model, repository, implementation)
  • controller (state management)

Implementation

void runCreateFeature(String name) {
  final pascal = toPascalCase(name);
  final base = 'lib/modules/$name';

  /// 📁 Create directory structure
  Directory('$base/view/screens').createSync(recursive: true);
  Directory('$base/view/widgets').createSync(recursive: true);
  Directory('$base/data/model').createSync(recursive: true);
  Directory('$base/data/repository').createSync(recursive: true);
  Directory('$base/data/implementation').createSync(recursive: true);
  Directory('$base/controller').createSync(recursive: true);

  /// 📄 Generate files from templates
  createFile(
    '$base/view/screens/${name}_screen.dart',
    TemplateService.render('lib/templates/screen.tpl', {'name': pascal}),
  );

  createFile(
    '$base/controller/${name}_controller.dart',
    TemplateService.render('lib/templates/controller.tpl', {'name': pascal}),
  );

  createFile(
    '$base/data/model/${name}_model.dart',
    TemplateService.render('lib/templates/model.tpl', {'name': pascal}),
  );

  createFile(
    '$base/data/repository/${name}_repository.dart',
    TemplateService.render('lib/templates/repo.tpl', {'name': pascal}),
  );

  createFile(
    '$base/data/implementation/${name}_repository_impl.dart',
    TemplateService.render('lib/templates/impl.tpl', {
      'name': pascal,
      'file_name': name,
    }),
  );

  /// 🔌 Inject into MultiProvider
  insertIntoFile(
    filePath: 'lib/main.dart',
    marker: '// @provider_cli-provider-insert',
    content: 'ChangeNotifierProvider(create: (_) => ${pascal}Controller()),',
  );

  /// 🔌 Register in DI container
  insertIntoFile(
    filePath: 'lib/core/di/injection.dart',
    marker: '// @provider_cli-di-insert',
    content:
        'getIt.registerLazySingleton<${pascal}Repository>(() => ${pascal}RepositoryImpl());',
  );

  print('✅ Feature "$name" created successfully');
}