run method
void
run(
- ArgResults results
)
override
Implementation
@override
void run(ArgResults results) {
// If --help is passed, print usage and return
if (results['help'] == true) {
printUsage(_parser);
return;
}
// Feature name
String? featureName =
results['feature-name'] as String? ??
(results.rest.isNotEmpty ? results.rest.first : null);
featureName ??= prompts.get('Enter feature name');
if (featureName.trim().isEmpty) {
Logger.error('Feature name cannot be empty');
return;
}
// State management type
String? stateManagementType;
if (results.wasParsed('state-management-type')) {
stateManagementType = results['state-management-type'] as String?;
} else {
stateManagementType = prompts.get(
'State management type (e.g., bloc, getx, provider, riverpod)',
defaultsTo: 'bloc',
);
}
// Split data source
bool? splitDataSource;
if (results.wasParsed('split-data-source')) {
splitDataSource = results['split-data-source'] as bool?;
} else {
splitDataSource = prompts.getBool(
'Split data source into local and remote?',
defaultsTo: false,
);
}
// Models
List<String>? models = (results['models'] as List?)?.cast<String>();
if (models == null || models.isEmpty) {
String modelsInput = prompts.get(
'List of model names to create (comma separated, leave empty for none)',
);
models = modelsInput.trim().isEmpty
? []
: modelsInput
.split(',')
.map((s) => s.trim())
.where((s) => s.isNotEmpty)
.toList();
}
// Use cases
List<String>? useCases = (results['use-cases'] as List?)?.cast<String>();
if (useCases == null || useCases.isEmpty) {
String useCasesInput = prompts.get(
'List of use case names to create (comma separated, leave empty for none)',
);
useCases = useCasesInput.trim().isEmpty
? []
: useCasesInput
.split(',')
.map((s) => s.trim())
.where((s) => s.isNotEmpty)
.toList();
}
// Screens
List<String>? screens = (results['screens'] as List?)?.cast<String>();
if (screens == null || screens.isEmpty) {
String screensInput = prompts.get(
'List of screen names to create (comma separated, leave empty for none)',
);
screens = screensInput.trim().isEmpty
? []
: screensInput
.split(',')
.map((s) => s.trim())
.where((s) => s.isNotEmpty)
.toList();
}
Logger.info('Creating feature: $featureName');
Logger.info('State management type: $stateManagementType');
Logger.info('Split data source: $splitDataSource');
Logger.info('Models: ${models.join(', ')}');
Logger.info('Use Cases: ${useCases.join(', ')}');
Logger.info('Screens: ${screens.join(', ')}');
// Here you would add the logic to actually create the feature scaffold
final generator = FeatureGenerator(
featureName: featureName,
stateManagementType: stateManagementType ?? 'bloc',
splitDataSource: splitDataSource ?? false,
models: models,
useCases: useCases,
screens: screens,
);
generator.generate();
Logger.success('Feature "$featureName" created successfully!');
}