zip_flutter 0.0.12 copy "zip_flutter: ^0.0.12" to clipboard
zip_flutter: ^0.0.12 copied to clipboard

Extract or create zip archives with ffi.

zip_flutter #

zip_flutter is a Dart package that enables you to extract or create zip archives using the dart:ffi library.

c code is modified from zip

Getting started #

Add the following dependency to your pubspec.yaml file:

dependencies:
  zip_flutter: ^0.0.7

Usage #

Create a Zip File #

Use the ZipFile.open method.

import 'package:zip_flutter/zip_flutter.dart';

void testAddFilesWithFileNames() {
  // Create a zip file
  var zip = ZipFile.open('test.zip');
  // Add file with file path
  zip.addFile('1.txt', 'test/1.txt');
  // Add file with file bytes
  zip.addFileFromBytes('2.txt', utf8.encode('Hello, World!'));
  // To add a file in a folder, use the '/' separator
  zip.addFile('folder/3.txt', 'test/folder/3.txt');
  // Add empty directory
  zip.addDirectory('empty');
  // Close the zip file
  zip.close();
}

Read a Zip File #

Read file list

void testListFiles() {
  // Open a zip file, mode must be ZipOpenMode.readonly
  var zip = ZipFile.open('test.zip', mode: ZipOpenMode.readonly);
  var entries = zip.getAllEntries();
  for (var entry in entries) {
    print(entry);
  }
  zip.close();
}

Read file by name

void testReadFile() {
  var zip = ZipFile.open('test.zip', mode: ZipOpenMode.readonly);
  var entry = zip.getEntryByName('1.txt');
  print(utf8.decode(entry.read()));
  zip.close();
}

Read file by index in file list

void testReadFileByIndex() {
  var zip = ZipFile.open('test.zip', mode: ZipOpenMode.readonly);
  var entry = zip.getEntryByIndex(0);
  print(utf8.decode(entry.read()));
  zip.close();
}

Extract zip manually

void testUnzipManually() {
  if (Directory('extracted').existsSync()) {
    Directory('extracted').deleteSync(recursive: true);
  }
  Directory('extracted').createSync();
  var zip = ZipFile.open('test.zip', mode: ZipOpenMode.readonly);
  var entries = zip.getAllEntries();
  for (var entry in entries) {
    if (entry.isDir) {
      Directory('extracted/${entry.name}').createSync(recursive: true);
      continue;
    }
    var file = File('extracted/${entry.name}');
    file.createSync(recursive: true);
    file.writeAsBytesSync(entry.read());
  }
  zip.close();
}

Utils for quick use #

Compress a folder to a zip file

void testCompressFolder() {
  var toBeCompressed = Directory('test');
  var resultZip = File('test.zip');
  ZipFile.compressFolder(toBeCompressed.path, resultZip.path);
}

Compress a folder with multiple threads

void testCompressWithThreads() async {
  var toBeCompressed = Directory('test');
  var resultZip = File('test.zip');
  await ZipFile.compressFolderAsync(toBeCompressed.path, resultZip.path, 4); // 4 threads
  print('Compression completed');
}

Note: Current implementation is not efficient for compressing large files (> 20MB). If a thread is compressing a large file, other threads will be blocked.

Extract a zip file to a folder

void testExtractZip() {
  var toBeExtracted = File('test.zip');
  var resultFolder = Directory('extracted');
  ZipFile.openAndExtract(toBeExtracted.path, resultFolder.path);
}

Extract a zip file with multiple isolates

void testExtractZipWithIsolates() async {
  var toBeExtracted = File('test.zip');
  var resultFolder = Directory('extracted');
  await ZipFile.openAndExtractAsync(toBeExtracted.path, resultFolder.path, 4); // 4 isolates
}
1
likes
130
points
278
downloads

Publisher

verified publishernyne.dev

Weekly Downloads

Extract or create zip archives with ffi.

Repository (GitHub)

Documentation

API reference

License

MIT (license)

Dependencies

ffi, flutter, path

More

Packages that depend on zip_flutter