首先添加以下依赖到pubspec.yaml
archive: ^2.0.13
path_provider: ^1.6.11
以下则是解压的方法。
/// 解压zip文件
Future<void> unzip() async {
// 加载assets资源
var ass = await rootBundle.load('assets/www.zip');
// 获取2进制内容
Uint8List bytes = ass.buffer.asUint8List();
// 解压
final archive = ZipDecoder().decodeBytes(bytes);
var documents = await getApplicationDocumentsDirectory();
// 设定要解压的目标文件夹
var wwwRoot = documents.path + '/www';
// 解压文件到磁盘
for (final file in archive) {
final filename = file.name;
if (file.isFile) {
final data = file.content as List<int>;
File('$wwwRoot/$filename')
..createSync(recursive: true) // 同步创建文件
..writeAsBytesSync(data); // 将解压出来的文件内容写入到文件
} else {
Directory('$wwwRoot/$filename')
..create(recursive: true);
}
}
}
因为是直接将压缩包的二进制内容加载到内存,因此对于大文件可能会崩溃。具体多大,我也没测试。也因手机而异吧。