run method

  1. @override
Future<int> run()
override

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 root = await rootOf(rootPath);

  final make = switch ((profile, release)) {
    (true, _) => ConstructGenerator.profile,
    _ => ConstructGenerator.release,
  };

  final progress = TickedProgress('Building', level: logger.level);

  // A generator per phase. `generateConstructType` is final, and each phase
  // stages and promotes its own outputs, so they cannot share an instance.
  for (final phase in _phases) {
    final generator = make(
      flavor: flavor,
      routesHandler: routesHandler,
      makers: constructs,
      logger: logger,
      fs: fs,
      rootPath: root.path,
      dartDefines: defines,
      generateConstructType: phase,
    );

    await generator.generate(progress.update);
  }

  progress.complete('Build succeeded');

  return 0;
}