我有一个CameraPreview
充满了整个屏幕,底部有一个FloatingActionButton
来拍照。
在该按钮的onPress
方法上,我正在进行一个网络调用,尽管我对此尚不在乎(结果)。因此,我希望在该方法内部进行的所有操作均以异步方式完成,因此它不会阻塞我的主线程。
这意味着(如果我理解正确的话)我不会使用await
关键字。
这是我的onPressed
// Attempt to take a picture and log where it's been saved
await controller.takePicture(path);
print("Done taking picture");
sendBase64ToAPI(path);
这是我的sendBase64ToApi
方法
Future<String> sendBase64ToAPI(String path) async {
File(path).readAsBytes().then(thenMethod);
return null;
}
void thenMethod(List bytes){
print("Start reading file");
Image image = decodeImage(bytes);
int x = ((screenWidth/2) + (overlayWidth/2)).toInt();
int y = ((screenHeight/2) + (overlayHeight/2)).toInt();
print("Start cropping image");
image = copyCrop(image, x, y, overlayWidth, overlayHeight);
var base64Str = base64.encode(image.getBytes());
print("Done");
print(base64Str.substring(0,30));
print(base64Str.substring(base64Str.length-30,base64Str.length-1));
}
我的UI完全冻结在“开始读取文件”和“开始裁剪图像”之间,尽管它们是异步方法,在没有await
的情况下被调用,所以这种情况不会发生。
为什么这些方法不异步执行?
答案 0 :(得分:0)
好的,this seems to be a known issue来自我正在使用的图书馆。
文档建议在decodeImage
中使用Isolate
函数。
如果有人发现我的代码中同步的内容,问题将持续几天。