我们如何等待用户完成点击按钮的操作,直到用户做出自己的决定扑朔迷离?

问题描述

例如,我们有一个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所建议。基本上,您可以确定直到实际按下按钮之前必须经过的时间,然后为该持续时间设置计时器。随后每次按下按钮都可以重置计时器。

我会使用第一个解决方案,因为按钮的预期行为是立即执行。