run method

  1. @override
Future<void> run(
  1. List<String> args
)
override

Executes the command using the provided command-line args.

Implementation

@override
Future<void> run(List<String> args) async {
  final positional = CommandArgs.positional(args);
  if (positional.length < 2) {
    LoggerService.error('Usage: $usage');
    return;
  }

  final target = positional[0].trim();
  final feature = positional[1].trim();
  final resource = positional.length > 2 ? positional[2].trim() : null;
  final overwrite = CommandArgs.hasFlag(args, '--yes') ||
      CommandArgs.hasFlag(args, '--force');

  final config = await ConfigService.load();
  final template = await TemplateService.load(config.defaultTemplate);

  final context = GeneratorContext(
      config: config, feature: feature, name: resource, template: template);

  LoggerService.section('Generating $target: ${resource ?? feature}');

  final generator = const ComponentGenerator();

  if (template.components.containsKey(target)) {
    await generator.generate(
      context: context,
      component: target,
      overwrite: overwrite,
    );
    await MaintenanceService().synchronize(context);
  } else if (template.groups.containsKey(target)) {
    for (final item in template.groups[target]!.components) {
      await generator.generate(
        context: context,
        component: item,
        overwrite: overwrite,
      );
    }
    await MaintenanceService().synchronize(context);
  } else {
    LoggerService.error('Unknown component "$target".');

    LoggerService.blank();

    LoggerService.info('Supported components:');
    LoggerService.blank();

    for (final entry in template.components.entries) {
      LoggerService.info(
          '${entry.key.padRight(25)}${entry.value.description}');
    }

    LoggerService.blank();

    LoggerService.blank();
    LoggerService.info('Supported groups:');
    LoggerService.blank();

    for (final entry in template.groups.entries) {
      LoggerService.info(
          '${entry.key.padRight(25)}${entry.value.description}');
    }

    return;
  }

  if (!CommandArgs.hasFlag(args, '--no-build-runner')) {
    await FlutterService(config).buildRunner();
  }

  LoggerService.blank();
  if (template.groups.containsKey(target)) {
    LoggerService.success('Group "$target" generated successfully.');
  } else {
    LoggerService.success('$target generated successfully.');
  }
  LoggerService.blank();
}