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

carvr3hs  于 2023-05-19  发布在  Flutter
关注(0)|答案(5)|浏览(155)

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

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

我的目标是在用户选择错误答案后延迟调用功能两秒(用户可以再次点击按钮,不触发任何动作),并立即阻止点击。我怎么才能做到呢?

fcipmucu

fcipmucu1#

你必须在外部作用域中添加一个helper变量,它将指示用户是否处于答案冷却状态。
最短的解决方案是:

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;
  }
}
hwazgwia

hwazgwia2#

为了延迟一个函数你可以做下面的代码或者使用Timer()

tappedbutton(int index) async {
               await Future.delayed(Duration(seconds: 2));
}
eufgjt7s

eufgjt7s3#

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

uhry853o

uhry853o4#

Future.delayed(const Duration(seconds: 2)).then((val) {
    // Your logic here 
  });
7kjnsjlb

7kjnsjlb5#

我不认为你的目的是推迟仪式。您正在尝试找到一种方法,让用户等到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();
    }
  }

相关问题