run method
Runs this command.
The return value is wrapped in a Future if necessary and returned by
CommandRunner.runCommand.
Implementation
@override
void run() async {
if (argResults?.rest.isEmpty ?? true) {
stdout.writeln('Usage: fsa generate smart <path/to/component_name>');
return;
}
final fullPath = argResults!.rest.first;
final parts = fullPath.split('/');
final name = parts.last;
final nested = parts.sublist(0, parts.length - 1).join('/');
final pascal = _toPascalCase(name);
final snake = _toSnakeCase(name);
final targetDir = Directory(p.join(presentationPath, nested, snake));
if (targetDir.existsSync()) {
stdout.writeln('❌ Smart component directory already exists.');
return;
}
stdout.writeln('🧠 Generating smart component "$pascal"...');
final prefix = _getRelativePrefix(targetDir.path);
await _createFile(p.join(targetDir.path, 'ui_state.dart'), _uiStateTemplate(pascal));
await _createFile(p.join(targetDir.path, 'ui_state_notifier.dart'), _notifierTemplate(pascal));
await _createFile(p.join(targetDir.path, 'view.dart'), _viewTemplate(pascal, prefix, false));
stdout.writeln('✅ Smart component "$pascal" created.');
}