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

Extract or create zip archives with ffi.

example/lib/main.dart

import 'dart:convert';
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:zip_flutter/zip_flutter.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Native Packages'),
        ),
        body: ListView(
          children: [
            ListTile(
              title: const Text('Create Test Files'),
              onTap: createTestFiles,
            ),
            ListTile(
              title: const Text('Create zip With File Names'),
              onTap: testAddFilesWithFileNames,
            ),
            ListTile(
              title: const Text('Create zip With File Bytes'),
              onTap: testAddFilesWithBytes,
            ),
            ListTile(
              title: const Text('Create zip With Multiple Threads'),
              onTap: testCompressWithThreads,
            ),
            ListTile(
              title: const Text('List Files'),
              onTap: testListFiles,
            ),
            ListTile(
              title: const Text('Read File'),
              onTap: testReadFile,
            ),
            ListTile(
              title: const Text('Unzip Manually'),
              onTap: testUnzipManually,
            ),
            ListTile(
              title: const Text('Unzip Sync'),
              onTap: testUnzipSync,
            ),
            ListTile(
              title: const Text('Unzip With Isolates'),
              onTap: testUnzipWithIsolates,
            ),
          ],
        ),
      ),
    );
  }

  void createTestFiles() {
    if(Directory('test').existsSync()) {
      Directory('test').deleteSync(recursive: true);
    }
    Directory('test').createSync();
    File('test/1.txt').writeAsStringSync('Hello World');
    File('test/2.txt').writeAsStringSync('Hello World 2');
    Directory('test/folder').createSync();
    File('test/folder/3.txt').writeAsStringSync('Hello World 3');
    Directory('test/empty').createSync();
  }

  void testAddFilesWithFileNames() {
    if (File('test.zip').existsSync()) {
      File('test.zip').deleteSync();
    }
    var zip = ZipFile.open('test.zip');
    zip.addFile('1.txt', 'test/1.txt');
    zip.addFile('2.txt', 'test/2.txt');
    zip.addFile('folder/3.txt', 'test/folder/3.txt');
    zip.addDirectory('empty');
    zip.close();
  }

  void testAddFilesWithBytes() {
    if (File('test.zip').existsSync()) {
      File('test.zip').deleteSync();
    }
    var zip = ZipFile.open('test.zip');
    zip.addFileFromBytes('1.txt', File('test/1.txt').readAsBytesSync());
    zip.addFileFromBytes('2.txt', File('test/2.txt').readAsBytesSync());
    zip.addFileFromBytes('folder/3.txt', File('test/folder/3.txt').readAsBytesSync());
    zip.addDirectory('empty');
    zip.close();
  }

  void testCompressWithThreads() async {
    if (File('test.zip').existsSync()) {
      File('test.zip').deleteSync();
    }
    await ZipFile.compressFolderAsync(r"test", 'test.zip', 4);
    print('Compression completed');
  }

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

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

  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();
    print('Unzip completed');
  }

  void testUnzipSync() {
    if (Directory('extracted').existsSync()) {
      Directory('extracted').deleteSync(recursive: true);
    }
    Directory('extracted').createSync();
    ZipFile.openAndExtract('test.zip', 'extracted');
    print('Unzip completed');
  }

  void testUnzipWithIsolates() async {
    if (Directory('extracted').existsSync()) {
      Directory('extracted').deleteSync(recursive: true);
    }
    Directory('extracted').createSync();
    await ZipFile.openAndExtractAsync('test.zip', 'extracted', 4);
    print('Unzip completed');
  }
}
1
likes
0
points
278
downloads

Publisher

verified publishernyne.dev

Weekly Downloads

Extract or create zip archives with ffi.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

ffi, flutter, path

More

Packages that depend on zip_flutter