run method

  1. @override
FutureOr<int>? run()
override

Runs this command.

The return value is wrapped in a Future if necessary and returned by CommandRunner.runCommand.

Implementation

@override
FutureOr<int>? run() async {
  final projectName =
      argResults?['project_name'] ?? argResults?.rest.firstOrNull;
  if (projectName == null || projectName.isEmpty) {
    print('Error: project_name is required.');
    return ExitCode.usage.code;
  }

  var vars = {
    for (var entry in bundle.vars.entries) entry.key: argResults?[entry.key],
    'project_name': projectName == '.'
        ? Directory.current.path.split(Platform.pathSeparator).last
        : projectName,
  };
  final generator = await MasonGenerator.fromBundle(bundle);
  final directory = Directory(projectName);
  final target = DirectoryGeneratorTarget(directory);
  await generator.hooks.preGen(vars: vars, onVarsChanged: (v) => vars = v);
  await generator.generate(target, vars: vars);
  await generator.hooks.postGen(
    vars: vars,
    onVarsChanged: (v) => vars = v,
    workingDirectory: projectName,
  );
  return ExitCode.success.code;
}