generateScreen method
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');
}
}