Flutter-如何将函数延迟几秒钟



我有一个函数,当用户选择不正确的答案时,它会返回false。

tappedbutton(int index) async {
final userAnswer = await userAnswer();
if (userAnswer) {
// Executing some code
}else{
ErrorSnackbar(); // This snackbar takes 2 second to close.
}

我的目标是在用户选择错误答案后,将调用该函数延迟两秒钟(用户可以再次单击按钮,不会触发任何操作(,并立即阻止单击。我怎样才能做到这一点?

您必须在外部范围中添加一个辅助变量,该变量将指示用户是否处于应答冷却期。

最短的解决方案是:

var answerCooldownInProgress = false;
tappedbutton(int index) async {
// Ignore user taps when cooldown is ongoing
if (answerCooldownInProgress) {
return;
}
final userAnswer = await userAnswer();
if (userAnswer) {
// ...
} else {
ErrorSnackbar();
answerCooldownInProgress = true;
await Future.delayed(const Duration(seconds: 2));
answerCooldownInProgress = false;
}
}

为了延迟函数,您可以执行以下代码或使用Timer()

tappedbutton(int index) async {
await Future.delayed(Duration(seconds: 2));
}
Future.delayed(const Duration(seconds: 2)).then((val) {
// Your logic here 
});

您可以使用Future.delayTimer()类来实现这一点。

我不认为您的目标是延迟函数。你正试图找到一种方法让用户等到ErrorSnackbar消失,对吧?

试试这种方法。它会保存上次单击按钮的时间,并取消每次按下按钮,直到2秒过去。

DateTime lastPressed = DateTime(0);
tappedButton(int index) async {
DateTime now = DateTime.now();
if (lastPressed.difference(now).inSeconds < 2) {
// button pressed again in under 2 seconds, cancel action
return;
}
lastPressed = now;
final userAnswer = await userAnswer();
if (userAnswer) {
// answer correct
} else{
// answer incorrect
ErrorSnackbar();
}
}

最新更新