replaceLibFolder static method

void replaceLibFolder(
  1. String oldLibPath,
  2. String newLibPath
)

Recursively copies old lib folder into new lib folder

Implementation

static void replaceLibFolder(String oldLibPath, String newLibPath) {
  final oldLibDir = Directory(oldLibPath);
  if (!oldLibDir.existsSync()) {
    throw Exception('Old lib folder not found at $oldLibPath');
  }

  final newLibDir = Directory(newLibPath);
  if (!newLibDir.existsSync()) {
    newLibDir.createSync(recursive: true);
  }

  int copiedFiles = 0;

  void copyRecursive(Directory source, Directory destination) {
    for (var entity in source.listSync(recursive: false)) {
      final newPath = p.join(destination.path, p.basename(entity.path));

      if (entity is File) {
        final parentDir = Directory(p.dirname(newPath));
        if (!parentDir.existsSync()) parentDir.createSync(recursive: true);
        entity.copySync(newPath);
      } else if (entity is Directory) {
        final newSubDir = Directory(newPath);
        if (!newSubDir.existsSync()) newSubDir.createSync();
        copyRecursive(entity, newSubDir);
      }
    }
  }

  copyRecursive(oldLibDir, newLibDir);

  if (copiedFiles < 2) {
    print('lib/ folder replaced successfully. $copiedFiles file copied.');
  } else {
    print('lib/ folder replaced successfully. $copiedFiles files copied.');
  }
}