runCleanCommand function

Future<void> runCleanCommand(
  1. List<String> args
)

Implementation

Future<void> runCleanCommand(List<String> args) async {
  final onlyCurrent = args.isNotEmpty && args.first == 'project';
  final root = Directory.current;
  final pubspecFiles = <File>[];

  if (onlyCurrent) {
    final pubspec = File('{root.path}/pubspec.yaml');
    if (await pubspec.exists()) {
      pubspecFiles.add(pubspec);
    } else {
      print('No pubspec.yaml found in the current directory.');
      exit(1);
    }
  } else {
    await for (final entity in root.list(recursive: true, followLinks: false)) {
      if (entity is File && entity.path.endsWith('pubspec.yaml')) {
        pubspecFiles.add(entity);
      }
    }
    if (pubspecFiles.isEmpty) {
      print('No pubspec.yaml found in the project.');
      exit(1);
    }
  }

  for (final pubspec in pubspecFiles) {
    final dir = pubspec.parent;
    print('\n--- Cleaning: \u001b[1m${dir.path}\u001b[0m ---');
    final pubspecLock = File('${dir.path}/pubspec.lock');
    if (await pubspecLock.exists()) {
      await pubspecLock.delete();
      print('Removed pubspec.lock');
    }
    final cleanResult = await Process.run('flutter', ['clean'], workingDirectory: dir.path);
    stdout.write(cleanResult.stdout);
    stderr.write(cleanResult.stderr);
    final pubGetResult = await Process.run('flutter', ['pub', 'get'], workingDirectory: dir.path);
    stdout.write(pubGetResult.stdout);
    stderr.write(pubGetResult.stderr);
    print('--- Cleaning finished in: ${dir.path} ---');
  }
  print('\nCleaning finished!');
}