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) {
    logger.error('No package name provided.');
    logger.info('Usage: flo_cli add package <name> [--dev]');
    return 64;
  }

  final packageName = argResults!.rest.first;
  final isDev = argResults!['dev'] as bool;

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

    String version = registry.getVersion(packageName) ?? 'any';

    logger.info('Adding package "$packageName" (version: $version)...');
    await dependencyEngine.addDependency(packageName, version, isDev: isDev);
    logger.success('Successfully added package "$packageName".');
    return 0;
  } catch (e) {
    if (e is ConflictException) {
      logger.error('Dependency Conflict: ${e.message}');
    } else {
      logger.error('Failed to add package: $e');
    }
    return 1;
  }
}