copyDirectory static method

Future<void> copyDirectory(
  1. String source,
  2. String destination,
  3. bool verbose
)

Implementation

static Future<void> copyDirectory(
  String source,
  String destination,
  bool verbose,
) async {
  final src = Directory(source);
  await for (final entity in src.list(recursive: true, followLinks: false)) {
    final rel = path.relative(entity.path, from: source);
    final segments = path.split(rel);

    // Skip certain directories and files
    if (segments.first.startsWith('.git') ||
        segments.first == '.dart_tool' ||
        segments.first == 'build' ||
        segments.first == '.idea' ||
        segments.first == '.DS_Store') {
      continue;
    }

    final destPath = path.join(destination, rel);

    if (entity is File) {
      final destFile = File(destPath);
      await destFile.parent.create(recursive: true);
      await destFile.writeAsBytes(await entity.readAsBytes());
      if (verbose) {
        stdout.writeln('  ${Constants.fileMessage} $rel');
      }
    } else if (entity is Directory) {
      await Directory(destPath).create(recursive: true);
    }
  }
}