run method
Runs this command.
The return value is wrapped in a Future if necessary and returned by
CommandRunner.runCommand.
Implementation
@override
Future<int> run() async {
if (argResults == null || argResults!.rest.isEmpty) {
_logger.err('Error: Please specifiy project name');
_logger.info('Usage: zuq create <project_name>');
return 1;
}
final projectName = argResults!.rest.first;
final fileConfig = _configParser.readConfig(
fallbackProjectName: projectName,
);
final String finalState;
final String finalRouter;
final String finalPreset;
final String finalName;
if (fileConfig != null) {
_logger.info('Using configuration from zuq.yaml');
finalName = fileConfig.projectName;
finalState = fileConfig.stateManagement;
finalRouter = fileConfig.router;
finalPreset = fileConfig.preset;
} else {
_logger.info(
'No configuration file found. Using command line arguments.',
);
finalName = projectName;
final results = argResults;
if (results != null) {
if (results.wasParsed('state')) {
finalState = results['state'] as String;
} else if (stdin.hasTerminal) {
finalState = _logger.chooseOne(
'Select state management solution:',
choices: ['riverpod', 'bloc', 'provider', 'none'],
defaultValue: 'none',
);
} else {
finalState = results['state'] as String;
}
if (results.wasParsed('router')) {
finalRouter = results['router'] as String;
} else if (stdin.hasTerminal) {
finalRouter = _logger.chooseOne(
'Select routing solution:',
choices: ['go_router', 'auto_route'],
defaultValue: 'go_router',
);
} else {
finalRouter = results['router'] as String;
}
if (results.wasParsed('preset')) {
finalPreset = results['preset'] as String;
} else if (stdin.hasTerminal) {
finalPreset = _logger.chooseOne(
'Select preset architecture template:',
choices: ['default', 'fintech', 'ecommerce'],
defaultValue: 'default',
);
} else {
finalPreset = results['preset'] as String;
}
} else {
finalState = 'none';
finalRouter = 'go_router';
finalPreset = 'default';
}
}
List<String> finalPlatforms =
argResults?['platforms'] as List<String>? ?? [];
if (finalPlatforms.isEmpty) {
if (stdin.hasTerminal) {
finalPlatforms = _logger.chooseAny(
'Select target platforms (use Space to select, Enter to confirm):',
choices: ['android', 'ios', 'web', 'macos', 'linux', 'windows'],
defaultValues: ['android', 'ios'],
);
} else {
finalPlatforms = ['android', 'ios', 'web', 'macos', 'linux', 'windows'];
}
}
return await _projectGenerator.generate(
projectName: finalName,
stateManagement: finalState,
router: finalRouter,
preset: finalPreset,
platforms: finalPlatforms,
);
}