我们如何等待用户完成点击按钮,直到用户做出 his/her 决定(在 flutter 中)?

How do we wait for the user to finish tapping a button until the user made up his/her decision (in flutter)?

例如我们有一个 like 按钮,当用户按下它时,它会调用云端某处的 http 函数。

FlatButton(
  onPressed: () => callOnLikeFunction(),
);

如果用户多次按下它(一遍又一遍地喜欢和不喜欢)怎么办?然后会多次调用http函数,会报错。

所以我尝试使用

Future.delayed(Duration(seconds: 2)).then(() => 
callOnLikeFunction()
);

但这不起作用,因为它仍然会按多少次触发,只是延迟了。

所以问题是我们如何等到最后一次按下作为用户的最终决定而忽略其他尝试?

更新:定义最后一次点击: 假设用户以 500 毫秒的间隔点击 3 次,但第 3 次点击经受了 2 秒的时间测试,那么第 3 次点击被认为是最后一次点击

您可以使用布尔标志来决定按下按钮后要做什么。第一次点击后,布尔值切换并显示 f.e。指示请求正在进行的 Snackbar。

requestIsInAction = false;

void buttonCallback() {
  if(!requestIsInAction) {
    requestIsInAction = true;
    // do the http stuff
  }
  else {
    // show error
  }
}

请求完成后,再次将标志设置为false

如果您想获得最后一次点击,您可以使用计时器,如 中所建议的那样。基本上,您决定在实际处理按钮按下之前必须经过的时间量,并为该持续时间设置计时器。随后每次按下按钮都可以重置计时器。

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