当我单击一个按钮并运行一些设置状态项然后调用send函数时,它等待发送功能完成后才能使设置状态项生效。我试图通过等待对图像和/或视频花费大量时间BASE64.encode的项目进行被调用函数异步,但它仍在等待。
寻找一种没有这个功能块的方法,有人提到了isolate,但是不知道如何使用它,并且示例显示了如何在整个应用程序中使用它而不仅仅是一个长时间运行的函数。
onPressed: () async {
setState(() {
submitting = true;
_imageFile = null;
TextInputAction.done;
});
await _sendReply();
},
以上是我在ImageButton上运行的内容。 _sendReply位于下方。
_sendReply() async {
if (_newreplycontroller.text.isNotEmpty || myimagefile != null) {
//_doShowSubmitting();
DateTime dateSubmit = new DateTime.now();
if (myimagefile != null) {
if (isImage) {
List<int> imageBytes = myimagefile.readAsBytesSync();
myimage = await BASE64.encode(imageBytes);
myvideo = 'NONE';
}
if (isVideo) {
List<int> imageBytes = myvidfile.readAsBytesSync();
myvideo = await BASE64.encode(imageBytes);
myimage = 'NONE';
}
} else {
myimage = 'NONE';
myvideo = 'NONE';
}
var mymessage = _newreplycontroller.text;
ChatServerMessage mychat = new ChatServerMessage(
widget.mychat.msgkey,
'message',
widget.mychat.refid,
widget.mychat.referralname,
replysub,
oid,
oname,
pid,
pname,
sender,
sendname,
receiver,
receivename,
mymessage,
dateSubmit.toString(),
widget.mychat.grpid.toString(),
widget.mychat.prid.toString(),
myfcmtoken,
myimage,
myvideo,
myext);
_doSendReply(mychat);
} else {
}
}
从调试开始,我知道所有的时间都花在了BASE64.encode上。任何想法都会很棒。