如果在 Futter 中 x 秒后 showDialog 没有响应,调用函数的最佳方法是什么

What is best way to call a function if there no response from showDialog after x seconds in Futter

我对 flutter 有点陌生。我进行了搜索但找不到合适的答案...如果用户在 x 秒后未响应 showDialog 警报,调用函数的最佳方式是什么?如果用户按下按钮,那么我不想执行该功能。

为此,您将使用计时器小部件。

计时器示例:

Timer _timer = Timer(
  const Duration(milliseconds: 500),
  () {
    // Call some function after delay of 500ms
  },
);

要取消定时器,使用_timer.cancel();

所以,很可能在 initState 方法中你会想要设置定时器对象,然后当用户按下按钮时,你可以取消这个定时器,这意味着它的回调不会 运行您指定的延迟。

您可以在显示对话框后立即启动 Timer x 秒,然后执行您的功能。如果用户单击您的按钮,您可以停止计时器。

Timer _timer;
bool userResponded = false;

您将需要 StatefulWidget 并且无论您在何处显示对话框,都需要启动计时器。

showDialog(...); // Your showDialog method
// You have to update userResponded to true if user clicks on your dialog or whatever
// It should look something like this: setState(() => userResponded = true);

_timer = Timer(const Duration(seconds: 10), () { // Start your timer for x seconds
  if (!userResponded) { // If user didn't respond
    // execute your function
  }
});

此外,您需要覆盖 onDispose 方法并停止计时器:

@override
void onDispose() {
  _timer?.cancel();
  super.onDispose();
}