【问题标题】:Multiple timers starting at once (Flutter)多个计时器同时启动 (Flutter)
【发布时间】:2021-11-23 02:49:23
【问题描述】:

所以我创建了一个计时器,我可以通过一个按钮来启动和停止。大多数情况下都可以正常工作,但是如果我向按钮发送垃圾邮件以快速启动和停止它,它似乎会同时启动多个计时器,因此,该函数的触发速度比一秒快得多。无论如何,我是否可以一次将其保留在一个计时器上,或者以某种方式一次取消所有计时器(我对颤振和计时器非常陌生)。

启动计时器:

void startTimer() {
    Timer.periodic(Duration(seconds: seconds), (t) {
      setState(() {
        timer = t;
        randomNote = Random().nextInt(6);
        randomType = Random().nextInt(6);
      });
    });
  }

停止计时器:

timer?.cancel();

我尝试添加一个 if 语句来检查计时器是否处于活动状态,因此代码如下所示:

 void startTimer() {
    if (timer?.isActive != true) {
      Timer.periodic(Duration(seconds: seconds), (t) {
        setState(() {
          timer = t;
          randomNote = Random().nextInt(6);
          randomType = Random().nextInt(6);
        })
      });
    }
  }

但没有任何改变。

【问题讨论】:

    标签: flutter timer


    【解决方案1】:

    您可以检查任何计时器当前是否正在工作。如果有一些计时器正在进行,请不要让该功能被触发。 要检查计时器是否工作,您可以查看here

    【讨论】:

    • 我尝试添加一个 if 语句,但它似乎不起作用
    【解决方案2】:

    好吧,既然你说if (timer?.isActive != true) 不起作用,那就是这样的替代方法,

    bool isTimerOn = false;
    ...
    void startTimer() {
      if(!isTimerOn){ 
        isTimerOn = true;
        Timer.periodic(Duration(seconds: seconds), (t) {
          setState(() {
            timer = t;
            randomNote = Random().nextInt(6);
            randomType = Random().nextInt(6);
          });
        });
      }
    }
    

    如果您要使用 timer?.cancel();,请确保将 isTimerOn 设置为 false。

    【讨论】:

      猜你喜欢
      • 2019-12-17
      • 2014-10-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 2011-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多