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 {
  if (args.length < 2) {
    LoggerService.error('Usage: $usage');
    return;
  }

  final target = args[0].trim();
  final feature = args[1].trim();
  final resource = args.length > 2 ? args[2].trim() : null;

  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);
    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);
    }
    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;
  }

  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();
}