【问题标题】:How to stop a timer in Flutter?如何在 Flutter 中停止计时器?
【发布时间】:2021-09-30 15:13:47
【问题描述】:

如何取消这个计时器?

我制作了一个旨在停止计时器的功能,但它似乎不起作用。有人知道为什么吗?

  int randomNote = Random().nextInt(6);
  int randomType = Random().nextInt(6);
  Timer? timer;
  String changeTimer = 'Start Timer';

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

  }

  void stopTimer() {
    timer?.cancel();
  }

这里有一个按钮小部件

onPressed: () {
                if (changeTimer == 'Start Timer') {
                  startTimer();
                  setState(() {
                    changeTimer = 'Stop Timer';
                  });
                }
                else {
                  stopTimer();
                  setState(() {
                    changeTimer = 'Start Timer';
                  });
                }
             },

如何取消这个计时器?

我制作了一个旨在停止计时器的功能,但它似乎不起作用。有谁知道为什么?我很困惑……

【问题讨论】:

    标签: flutter dart timer widget


    【解决方案1】:

    您没有为外部 timer 变量分配任何内容

    这应该可行:

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

    【讨论】:

    • 如果我们在第一个计时器回调调用之前调用stopTimer,您的代码似乎会出错。
    • ?.接线员会帮忙 :)
    • Null 在这里不是问题。您的代码中的问题是您在计时器回调中分配变量。这意味着在第一次回调调用之前您将无法停止计时器。例如。你只能在一秒钟后完成。
    【解决方案2】:

    问题是您永远不会分配您的 timer 变量。类似的东西应该可以工作:

    int randomNote = Random().nextInt(6);
    int randomType = Random().nextInt(6);
    Timer? timer;
    String changeTimer = 'Start Timer';
        
    void startTimer() {
      timer = Timer.periodic(const Duration(seconds: 1), (t) {
        setState(() {
          randomNote = Random().nextInt(6);
          randomType = Random().nextInt(6);
        });
      }); 
    }
        
    void stopTimer() {
      timer?.cancel();
    }
    

    【讨论】:

      猜你喜欢
      • 2022-08-16
      • 1970-01-01
      • 2020-01-02
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多