介绍一个Flutter解压缩插件

前言

最近要用Flutter实现文件的解压功能,我第一时间就到网上搜索有木有比较成熟的轮子,因此凭我有限的搜索能力,最终还是找到了一个比较满意的解压缩插件,GitHub地址:

https://github.com/brendan-duncan/archive

说明

按照官方说明,该插件适用用于编码和解码各种存档和压缩格式。目前解码支持以下格式:

  • Zip (Archive)

  • Tar (Archive)

  • ZLib [Inflate decompression]

  • GZip [Inflate decompression]

  • BZip2 [decompression]

    编码支持一下格式:

  • Zip (Archive)

  • Tar (Archive)

  • ZLib [Deflate compression]

  • GZip [Deflate compression]

  • BZip2 [compression]

使用

接下来我写了个demo简单使用了该插件,解压zip文件,和压缩成zip文件:

1、解压文件,需指定解压文件的路径:

///解压
void _unZip() async{
    if(_unZipNameController.text==null||_unZipNameController.text==""){
      Fluttertoast.showToast(msg: "压缩包文件名称不能为空!");
      return;
    }
    String zipFilePath = _zipRootPath+"/"+_unZipNameController.text ;
    if(!File(zipFilePath).existsSync()){
      Fluttertoast.showToast(msg: "压缩包文件不存在!");
      return;
    }
    // 从磁盘读取Zip文件。
    List bytes = File(zipFilePath).readAsBytesSync();
    // 解码Zip文件
    Archive archive = ZipDecoder().decodeBytes(bytes);

    // 将Zip存档的内容解压缩到磁盘。
    for (ArchiveFile file in archive) {
      if (file.isFile) {
        List data = file.content;
        File(_zipRootPath+"/"+file.name)
          ..createSync(recursive: true)
          ..writeAsBytesSync(data);
      } else {
        Directory(_zipRootPath+"/"+file.name)
          ..create(recursive: true);
      }
    }
    print("解压成功");
}

2、压缩文件:

 ///压缩
  void _zip() async{
    if(_zipNameController.text==null||_zipNameController.text==""){
      Fluttertoast.showToast(msg: "待压缩文件名称不能为空!");
      return;
    }
    String directory = _zipRootPath+"/"+_zipNameController.text;
    if(!Directory(directory).existsSync()){
      Fluttertoast.showToast(msg: "待压缩文件不存在!");
      return;
    }
    // Zip a directory to out.zip using the zipDirectory convenience method
    //使用zipDirectory方法将目录压缩到xxx.zip
    var encoder = ZipFileEncoder();
    encoder.zipDirectory(Directory(directory), filename: directory+".zip");
    Fluttertoast.showToast(msg: "压缩成功");
    //手动创建目录和单个文件的zip。
//    encoder.create('out2.zip');
//    encoder.addDirectory(Directory('out'));
//    encoder.addFile(File('test.zip'));
//    encoder.close();
  }

3、也许这个插件没考虑到Android权限这一点吧,因此解压过程需要对文件操作,这时别忘了要在Android工程目录下的AndroidManifest.xml下添加权限:



对于Android6.0以上的设备需要考虑到运行时权限。

demo效果

介绍一个Flutter解压缩插件_第1张图片
image
介绍一个Flutter解压缩插件_第2张图片
image

GitHub Demo地址:

https://github.com/ChessLuo/flutter_study_app

最后,个人觉得这是比较好的一个Flutter压缩插件,但是还是有很多缺陷的,如果要自己去实现一个插件的话,必须要适配Android、iOS;考虑到iOS端没啥经验,估计得折腾很久,有木有更好的轮子呢,欢迎各位留言,谢谢!

支持我的话可以关注下我的公众号,一起学习Android、小程序、跨平台开发~

介绍一个Flutter解压缩插件_第3张图片
image

你可能感兴趣的:(介绍一个Flutter解压缩插件)