在我的代码中,按下按钮后调用方法,调用三个函数进行计算并导出到 PDF 文件。其中一个函数将类的字段作为参数,通过在应用程序中移动滑块来更改该参数。问题是按下按钮的动画由于计算和导出而滞后。此外,exe 的 CPU 使用率上升了 7% - 15%。
该方法不返回任何内容,其工作结果只是 PDF 文件,所以我不需要等到它完成,只需启动它并关心其他事件。
我想让这个方法并行或同时计算,所以它不会减慢整个应用程序的速度,并且按下按钮的动画播放流畅。
尝试
我曾尝试将函数类型更改为 Future 并添加异步,但没有帮助。
我也试过用
Isolate.run
。如果我只在其中放置两个函数,它就可以工作,但是如果我添加第三个将类的字段作为参数的函数,它将停止工作。
这里是类的简化外观和按下按钮后调用的方法。
class Pattern{
int scale = 10; //it's changed by slider
void exportImage() {
ImageBMP image = drawPattern(scale); //if I add this to Isolate it breakes
var dividedImage = divideImage(image);
createPDF(dividedImage);
}
}
导入具有计算方法的foundation.dart:
import 'package:flutter/foundation.dart';
然后在您的 exportImage 方法中使用计算在后台完成它的工作。
void exportImage() {
compute((_) {
ImageBMP image = createImage();
var dividedImage = divideImage(image);
createPDF(dividedImage);
}, null);
}
最终通过使用
Isolate.run
并在方法中为scale
创建局部变量解决了这个问题。
最终代码看起来像这样
import 'dart:isolate';
class Pattern{
int scale = 10; //it's changed by slider
void exportImage() {
int l_scale = scale;
Isolate.run
(()
{
ImageBMP image = createImage(l_scale);
var dividedImage = divideImage(image);
createPDF(dividedImage);
}
);
}
}