Flutter如何创建zip文件

5
如何使用Flutter创建zip文件?我尝试使用archive包,但它没有任何示例来创建zip文件。请帮忙。我在Flutter中完全是新手。使用archive包创建zip文件后,在提取zip文件时出现错误。
使用archive包,我做了以下操作:
  void _generateItemArchive(ZipFileEncoder encoder, int id) async {
List<Item> _itemList = await DBProvider.db.getAllItem(id);
_itemList.forEach((Item _item) {
  encoder.addFile(File(_item.photo));
});

}

ZipFileEncoder encoder = ZipFileEncoder();
encoder.create(join(documentsDirectory.path, 'product.zip'));

encoder.addFile(File('${documentsDirectory.path}/TestDB.db'));

List<Supplier> _supplierList = await DBProvider.db.getAllSupplier();
_supplierList.forEach((Supplier _supplier) {
  encoder.addFile(File(_supplier.photo));
  _generateItemArchive(encoder, _supplier.id);
});

当我尝试调用 encoder.close() 时出现了一个错误; 我需要添加来自数据库记录的文件。


请查看示例选项卡。有一个方便的方法可以压缩整个文件夹,或者您可以压缩单个文件,或者在内存中压缩字节。尝试示例后,编辑问题以使其更精确。(您也可以尝试独立的Dart应用程序进行练习。) - Richard Heap
2个回答

7

将以下内容添加到您的 'pubspec.yaml' 文件中(来自https://pub.dev/packages/archive

archive: ^3.1.6

在你的dart文件中导入此文件:

import 'package:archive/archive.dart';

最后:

Directory appDocDirectory = await getExternalStorageDirectory();
var encoder = ZipFileEncoder();
encoder.create(appDocDirectory.path+"/"+'jay.zip');
encoder.addFile(File(selectedAdharFile));
encoder.addFile(File(selectedIncomeFile));
encoder.close();

Flutter Web 支持这个吗? - TejaDroid
1
是的,依赖项'archive:^2.0.13'的最新版本现在也支持Web。 - Jay Gadariya
addFile 返回一个 Future。不使用 await 直接调用它是否安全? - FourtyTwo

0

同时还有一款优化了Android和iOS的新插件在这里可用(这是我的库)。压缩文件的示例:

  final sourceDir = Directory("source_dir");
  final files = [
    File(sourceDir.path + "/file1"),
    File(sourceDir.path + "/file2")
  ];
  final zipFile = File("zip_file_path");
  try {
    FlutterArchive.zipFiles(
        sourceDir: sourceDir, files: files, zipFile: zipFile);
  } catch (e) {
    print(e);
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接