generateFeature function
Generates a complete Karna MVC feature.
Implementation
Future<void> generateFeature({
required String featureName,
bool memoryAware = false,
}) async {
final pascal = toPascalCase(featureName);
final camel = toCamelCase(featureName);
final libDir = 'lib/features/$featureName';
final testDir = 'test/features/$featureName';
// Create directories
await Directory('$libDir/model').create(recursive: true);
await Directory('$libDir/repository/data_source').create(recursive: true);
await Directory('$libDir/controller').create(recursive: true);
await Directory('$libDir/view').create(recursive: true);
await Directory(testDir).create(recursive: true);
// Write files
await _write('$libDir/model/${featureName}_model.dart',
modelTemplate(featureName, pascal));
Logger.success('model/${featureName}_model.dart');
await _write('$libDir/repository/${featureName}_repository.dart',
repositoryTemplate(featureName, pascal));
Logger.success('repository/${featureName}_repository.dart');
await _write('$libDir/repository/${featureName}_repository_impl.dart',
repositoryImplTemplate(featureName, pascal));
Logger.success('repository/${featureName}_repository_impl.dart');
await _write(
'$libDir/repository/data_source/${featureName}_remote_source.dart',
remoteSourceTemplate(featureName, pascal));
Logger.success('repository/data_source/${featureName}_remote_source.dart');
await _write(
'$libDir/repository/data_source/${featureName}_local_source.dart',
localSourceTemplate(featureName, pascal));
Logger.success('repository/data_source/${featureName}_local_source.dart');
await _write('$libDir/controller/${featureName}_controller.dart',
controllerTemplate(featureName, pascal, camel, memoryAware: memoryAware));
Logger.success('controller/${featureName}_controller.dart');
await _write('$libDir/view/${featureName}_view.dart',
viewTemplate(featureName, pascal, camel));
Logger.success('view/${featureName}_view.dart');
await _write('$testDir/${featureName}_controller_test.dart',
controllerTestTemplate(featureName, pascal, camel));
Logger.success('test/${featureName}_controller_test.dart');
// Register in providers.dart
await _registerInProviders(featureName, pascal, memoryAware: memoryAware);
Logger.newLine();
Logger.info("✨ Feature '$featureName' created successfully!");
Logger.newLine();
Logger.info('📝 Next steps:');
Logger.info(' 1. Add fields to model/${featureName}_model.dart');
Logger.info(' 2. Implement ${featureName}_remote_source.dart');
Logger.info(' 3. Add a route in core/routes/app_routes.dart');
Logger.info(' 4. Build your UI in view/${featureName}_view.dart');
}