runCommand method Null safety
- ArgResults topLevelResults
override
Runs the command specified by topLevelResults
.
This is notionally a protected method. It may be overridden or called from subclasses, but it shouldn't be called externally.
It's useful to override this to handle global flags and/or wrap the entire
command in a block. For example, you might handle the --verbose
flag
here to enable verbose logging before running the command.
This returns the return value of Command.run.
Implementation
@override
Future<int?> runCommand(ArgResults topLevelResults) async {
_logger
..detail('Argument information:')
..detail(' Top level options:');
for (final option in topLevelResults.options) {
if (topLevelResults.wasParsed(option)) {
_logger.detail(' - $option: ${topLevelResults[option]}');
}
}
if (topLevelResults.command != null) {
final commandResult = topLevelResults.command!;
_logger
..detail(' Command: ${commandResult.name}')
..detail(' Command options:');
for (final option in commandResult.options) {
if (commandResult.wasParsed(option)) {
_logger.detail(' - $option: ${commandResult[option]}');
}
}
}
if (_analytics.enabled) {
_logger.detail('Running with analytics enabled.');
}
int? exitCode = ExitCode.unavailable.code;
if (topLevelResults['version'] == true) {
_logger.info(packageVersion);
exitCode = ExitCode.success.code;
} else if (topLevelResults['analytics'] != null) {
final optIn = topLevelResults['analytics'] == 'true';
_analytics.enabled = optIn;
_logger.info('analytics ${_analytics.enabled ? 'enabled' : 'disabled'}.');
exitCode = ExitCode.success.code;
} else {
exitCode = await super.runCommand(topLevelResults);
}
await _checkForUpdates();
return exitCode;
}