generateScreen method

Future<void> generateScreen(
  1. String name
)

Generates a standalone screen with controller and binding.

name - The name of the screen to generate (e.g., 'login', 'dashboard').

Creates a minimal screen structure suitable for simple pages that don't require the full Clean Architecture setup. Includes:

  • Page widget with proper routing
  • Controller/BLoC for state management
  • Binding for dependency injection

The generated files adapt to the configured state management pattern.

Example:

await fileGenerator.generateScreen('login');
// Creates: lib/features/login/presentation/...

Implementation

Future<void> generateScreen(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/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/presentation/pages/${snakeName}_page.dart':
        _generateSimplePage(name),
    'lib/features/$snakeName/presentation/bindings/${snakeName}_binding.dart':
        _generateSimpleBinding(name),
  };

  // Add state manager specific files
  if (isBloc) {
    files['lib/features/$snakeName/presentation/bloc/${snakeName}_bloc.dart'] =
        _generateSimpleBlocController(name);
    files['lib/features/$snakeName/presentation/bloc/${snakeName}_event.dart'] =
        _generateSimpleBlocEvent(name);
    files['lib/features/$snakeName/presentation/bloc/${snakeName}_state.dart'] =
        _generateSimpleBlocState(name);
  } else {
    files['lib/features/$snakeName/presentation/controllers/${snakeName}_controller.dart'] =
        _generateSimpleController(name);
  }

  for (final entry in files.entries) {
    await writeFile(entry.key, entry.value);
  }

  print('✅ Generated screen "$name" with files:');
  for (final filePath in files.keys) {
    print('  - $filePath');
  }
}