zipFiles function

Future<File> zipFiles(
  1. List<String> paths, {
  2. String name = 'archive.zip',
})

Implementation

Future<File> zipFiles(
  List<String> paths, {
  String name = 'archive.zip',
}) async {
  if (paths.isEmpty) {
    throw Exception('No hay archivos para zippear');
  }

  final tmpDir = Directory.systemTemp;
  final zipPath = '${tmpDir.path}/$name';

  final zipFile = File(zipPath);
  if (await zipFile.exists()) {
    await zipFile.delete();
  }

  final archive = Archive();

  for (final p in paths) {
    final file = File(p);
    if (!file.existsSync()) continue;

    final bytes = file.readAsBytesSync();
    final entryName = p.split(Platform.pathSeparator).last;
    archive.addFile(ArchiveFile(entryName, bytes.length, bytes));
  }

  final zipBytes = ZipEncoder().encode(archive);
  return zipFile..writeAsBytesSync(zipBytes);
}