main function

void main(
  1. List<String> args
)

Implementation

void main(List<String> args) async {
  final scope = RootScope();
  final terminal = Terminal(stdout: stderr);
  scope.add(Terminal.provider, terminal);

  final index = args.indexOf('--');
  final havenArgs = index >= 0 ? args.take(index) : args;
  final isJson = havenArgs.contains('--json');

  final context = HavenCommandContext();

  final runner = HavenCommandRunner(
    'haven',
    'A powerful tool for superintend Flutter versions',
    scope: scope,
    context: context,
    isJson: isJson,
  );

  final log = _setupLogger(isJson, terminal, runner);
  scope.add(HVLogger.provider, log);

  _defineArguments(runner, context, terminal, log);

  registerHavenCommands(runner);
  try {
    final result = await runner.run(args);
    if (result == null) {
      await runner.printUsage();
    } else {
      await runner.writeResultAndExit(result);
    }
  } on CommandError catch (exception, stackTrace) {
    log.v('$stackTrace');
    await runner.writeResultAndExit(exception.result);
  } on UsageException catch (exception) {
    await runner.writeResultAndExit(
      CommandHelpResult(
        didRequestHelp: runner.didRequestHelp,
        help: exception.message,
        usage: exception.usage,
      ),
    );
  } catch (exception, stackTrace) {
    await runner.writeResultAndExit(
      CommandErrorResult(exception, stackTrace, log.level?.index ?? 0),
    );
  }
}