【发布时间】:2021-08-01 18:11:59
【问题描述】:
颤振:网络
你好,我想当我点击一个按钮时,下面的函数以非阻塞方式执行并且它不会冻结 ui,问题是通过将它包装在 Future 中,它冻结了 ui,我甚至使用了 async_task 但它不起作用......
List<int> _compressFiles(List<Uint8List> data) {
BZip2Encoder zec = BZip2Encoder();
Archive archive = new Archive();
for (var i = 0; i < data.length; i++) {
archive.addFile(ArchiveFile(i.toString(), data[i].elementSizeInBytes, data[i]));
}
List<int> tar_data = TarEncoder().encode(archive);
List<int> tar_bz2 = BZip2Encoder().encode(tar_data);
return tar_bz2;
}
(此代码使用归档库https://pub.dev/packages/archive)。
onPressed 函数:
onPressed: () {
//this freeze the ui for 3-4s
List<Uint8List> l = [];
for (var i in list) {
l.add(i.image);
}
compressFiles(l).then(...);
}
【问题讨论】:
-
这在 Flutter WEB 上有效吗?它是否比带有 web-worker 的 js-interop 更好?