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 {
final results = argResults!;
final verbose = results['verbose'] as bool;
final logger = FLILogger(verbose);
final prefix = results['prefix'] as String;
final explicit = results['file'] as String?;
final flavors = (results['flavor'] as List<dynamic>).cast<String>();
final allFlavors = results['all-flavors'] as bool;
final listFlavors = results['list-flavors'] as bool;
final continueOnError = results['continue-on-error'] as bool;
final strict = results['strict'] as bool;
final autoYes = results['yes'] as bool;
// Reject stray positional args before doing anything else: e.g.
// `generate foobar` would otherwise silently ignore `foobar`.
final rejectCode = rejectUnknownArgs(results, logger);
if (rejectCode != null) {
return rejectCode;
}
// README contract: --flavor and --all-flavors are mutually exclusive.
// Conflicting flags → usage error (64).
if (flavors.isNotEmpty && allFlavors) {
logger.error('Could not generate launcher icons');
logger.error(
'--flavor and --all-flavors are mutually exclusive; pass one or the other.',
);
return 64;
}
// 1. Resolve which config source to use.
final ResolvedSource resolved;
try {
resolved = resolveSource(
prefixPath: prefix,
explicitFilePath: explicit,
logger: logger,
);
} on NoConfigFoundException catch (e) {
logger.error('Could not generate launcher icons');
logger.error('$e');
return 65;
}
// 2. Dispatch by source kind.
switch (resolved.kind) {
case ConfigSourceKind.consolidatedFlavors:
return _runConsolidated(
resolved: resolved,
logger: logger,
prefix: prefix,
requestedFlavors: flavors,
allFlavors: allFlavors,
listFlavors: listFlavors,
continueOnError: continueOnError,
strict: strict,
autoYes: autoYes,
);
case ConfigSourceKind.explicitFile:
if (resolved.isMultiFlavor) {
return _runConsolidated(
resolved: resolved,
logger: logger,
prefix: prefix,
requestedFlavors: flavors,
allFlavors: allFlavors,
listFlavors: listFlavors,
continueOnError: continueOnError,
strict: strict,
autoYes: autoYes,
);
}
return _runSingleConfig(
loader: () => Config.loadConfigFromPath(resolved.path!, ''),
logger: logger,
prefix: prefix,
requestedFlavors: flavors,
allFlavors: allFlavors,
listFlavors: listFlavors,
strict: strict,
autoYes: autoYes,
);
case ConfigSourceKind.legacyFlavors:
return _runLegacyFlavors(
prefix: prefix,
logger: logger,
requestedFlavors: flavors,
allFlavors: allFlavors,
listFlavors: listFlavors,
continueOnError: continueOnError,
strict: strict,
autoYes: autoYes,
);
case ConfigSourceKind.singleFile:
return _runSingleConfig(
loader: () => Config.loadConfigFromPath(resolved.path!, ''),
logger: logger,
prefix: prefix,
requestedFlavors: flavors,
allFlavors: allFlavors,
listFlavors: listFlavors,
strict: strict,
autoYes: autoYes,
);
case ConfigSourceKind.pubspecInline:
return _runSingleConfig(
loader: () => Config.loadConfigFromPubSpec(prefix),
logger: logger,
prefix: prefix,
requestedFlavors: flavors,
allFlavors: allFlavors,
listFlavors: listFlavors,
strict: strict,
autoYes: autoYes,
);
}
}