handle method
Called automatically before executing the command. You can override to do pre-validation or setup.
Implementation
@override
Future<void> handle(List<String> args) async {
final input = argResults?['name'] as String?;
if (input == null || input.trim().isEmpty) {
logger.error('❌ Usage: khadem make:provider --name=Auth/Event');
exitCode = 1;
return;
}
final parts = CliNaming.splitFolderAndName(input);
final name = parts.name;
final folder = parts.folder.toLowerCase();
final className = '${CliNaming.toPascalCase(name)}ServiceProvider';
final fileName = '${CliNaming.toSnakeCase(name)}_service_provider.dart';
final filePath =
'lib/app/providers/${folder.isEmpty ? '' : '$folder/'}$fileName';
final file = File(filePath);
if (await file.exists()) {
logger.error('❌ Provider file already exists at $filePath');
exitCode = 1;
return;
}
await file.create(recursive: true);
await file.writeAsString('''
import 'package:khadem/contracts.dart' show ServiceProvider, ContainerInterface;
class $className extends ServiceProvider {
@override
void register(ContainerInterface container) {
// Optional: put any registration logic here
}
@override
Future<void> boot(ContainerInterface container) async {
// Optional: put any boot logic here
}
}
''');
logger.info('✅ Service provider "$className" created at $filePath');
exitCode = 0;
return;
}