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 {
  if (argResults == null ||
      argResults!.rest.isEmpty ||
      argResults!.rest[0] != 'dependencies') {
    logger.error('Invalid configuration target.');
    logger.info('Usage: flo_cli configure dependencies');
    return 64;
  }

  final registry = locator<PackageRegistry>();
  final dependencyEngine = locator<DependencyEngine>();

  // We get a list of known packages from the registry
  final packages = PackageRegistry.defaultPackages.keys.toList();

  logger.info('Configure Dependencies:');
  logger.info('Select packages to install (y/N):');

  final selectedPackages = <String>[];

  for (var package in packages) {
    stdout.write('Install $package? [y/N]: ');
    final input = stdin.readLineSync()?.trim().toLowerCase();
    if (input == 'y' || input == 'yes') {
      selectedPackages.add(package);
    }
  }

  if (selectedPackages.isEmpty) {
    logger.info('No packages selected.');
    return 0;
  }

  logger.info('Installing selected packages...');

  bool hasErrors = false;
  for (var package in selectedPackages) {
    try {
      final version = registry.getVersion(package)!;
      logger.info('  - Adding $package ($version)...');
      // Simple heuristic: if it contains "build_runner" or "freezed_annotation", it's usually dev but let's just make build_runner dev.
      // Actually, we can just install all as regular dependencies for simplicity, or we can add logic for dev deps.
      final isDev = package == 'build_runner' || package == 'lints';

      await dependencyEngine.addDependency(package, version, isDev: isDev);
    } catch (e) {
      hasErrors = true;
      if (e is ConflictException) {
        logger.error('    Conflict: ${e.message}');
      } else {
        logger.error('    Error adding $package: $e');
      }
    }
  }

  if (hasErrors) {
    logger.error('Finished with errors.');
    return 1;
  } else {
    logger.success('Successfully configured dependencies.');
    return 0;
  }
}