我正在使用存档包来扩展 zip 文件,如下所示:
final bytes = new File(zippedFile).readAsBytesSync();
final archive = new ZipDecoder().decodeBytes(bytes);
for (var file in archive) {
final filename = '/Users/mark/blah/${file.name}';
if (file.isFile) {
var outFile = new File(filename);
outFile = await outFile.create(recursive: true);
await outFile.writeAsBytes(file.content);
} else {
await new Directory(filename)
.create(recursive: true);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我在 Flutter 中的 UI 线程不时挂起,导致 CircularProgressIndicator 出现卡顿 - 我怀疑问题出在对 file.content 的调用上。如何在不阻塞 UI 线程的情况下调用它?我需要使用隔离吗?
Mar*_*ark -1
如果使用 Flutter,这里有一个基于 G\xc3\xbcnter Z\xc3\xb6chbauer\ 的评论的解决方案:
\n\n final bytes = new File(zippedFile).readAsBytesSync();\n final archive = new ZipDecoder().decodeBytes(bytes);\n\n for (var file in archive) {\n final filename = \'/Users/mark/blah/${file.name}\';\n if (file.isFile) {\n final decompressed = await compute(decompressArchiveFile, file);\n var outFile = new File(filename);\n outFile = await outFile.create(recursive: true);\n await outFile.writeAsBytes(decompressed);\n\n } else {\n await new Directory(filename)\n .create(recursive: true);\n }\n }\nRun Code Online (Sandbox Code Playgroud)\n\n这是函数decompressArchiveFile:
List<int> decompressArchiveFile(ArchiveFile file) {\n return file.content;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这种方法可行,但速度大约是同步方法的 5 倍。
\n| 归档时间: |
|
| 查看次数: |
5759 次 |
| 最近记录: |