copyAssets static method

void copyAssets(
  1. String oldAssetsPath,
  2. String newAssetsPath
)

Recursively copies old assets folder into new project

Implementation

static void copyAssets(String oldAssetsPath, String newAssetsPath) {
  final oldDir = Directory(oldAssetsPath);
  if (!oldDir.existsSync()) {
    throw Exception('Old assets folder not found at $oldAssetsPath');
  }

  final newDir = Directory(newAssetsPath);
  if (!newDir.existsSync()) newDir.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);
        copiedFiles++;
      } else if (entity is Directory) {
        final newSubDir = Directory(newPath);
        if (!newSubDir.existsSync()) newSubDir.createSync();
        copyRecursive(entity, newSubDir);
      }
    }
  }

  copyRecursive(oldDir, newDir);
  if (copiedFiles < 2) {
    print('Assets copied successfully. $copiedFiles file copied.');
  } else {
    print('Assets copied successfully. $copiedFiles files copied.');
  }
  print("Don't forget to specify assets in pubspec.yaml");
}