如何解决我们如何等待用户完成点击按钮的操作,直到用户做出自己的决定扑朔迷离?
例如,我们有一个like
按钮,当用户按下它时,它将在云中的某个地方调用http函数。
FlatButton(
onpressed: () => callOnLikeFunction(),);
如果用户多次按下它(一遍又一遍,又不一样)怎么办?然后它将多次调用http函数,并可能导致错误。
所以我尝试使用
Future.delayed(Duration(seconds: 2)).then(() =>
callOnLikeFunction()
);
但这是行不通的,因为它仍然会按按下次数触发,只是延迟。
所以问题是,我们如何等到最后一次按下作为用户的最终决定,而忽略其他尝试?
更新:定义最后一次点击: 假设用户以500毫秒的间隔轻击3次,但是第3次轻击经受了2秒的时间测试,那么第3次轻击被认为是最后一次轻击
解决方法
您可以使用布尔标志来确定按下按钮后的操作。第一次点击后,布尔值切换并显示f Snackbar指示请求正在进行中。
requestIsInAction = false;
void buttonCallback() {
if(!requestIsInAction) {
requestIsInAction = true;
// do the http stuff
}
else {
// show error
}
}
请求完成后,再次将标志设置为false
。
如果要获得LAST抽头,可以使用计时器,如that post所建议。基本上,您可以确定直到实际按下按钮之前必须经过的时间,然后为该持续时间设置计时器。随后每次按下按钮都可以重置计时器。
我会使用第一个解决方案,因为按钮的预期行为是立即执行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。