【问题标题】:How to Check if Timer is Active Before Creating a New One如何在创建新计时器之前检查计时器是否处于活动状态
【发布时间】:2020-05-29 04:05:52
【问题描述】:

我在另一个线程上遇到了这段用于计时器的代码。当您同时按下RaisedButton 多次时,它会为每次点击增加-1 秒,从而增加减少率。

关于检查计时器是否已激活以及是否不让RaisedButton 创建新计时器的最简单方法的任何想法。谢谢!

import 'dart:async';

[...]

Timer _timer;
int _start = 10;

void startTimer() {
  const oneSec = const Duration(seconds: 1);
  _timer = new Timer.periodic(
    oneSec,
    (Timer timer) => setState(
      () {
        if (_start < 1) {
          timer.cancel();
        } else {
          _start = _start - 1;
        }
      },
    ),
  );
}

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

Widget build(BuildContext context) {
  return new Scaffold(
    appBar: AppBar(title: Text("Timer test")),
    body: Column(
      children: <Widget>[
        RaisedButton(
          onPressed: () {
            startTimer();
          },
          child: Text("start"),
        ),
        Text("$_start")
      ],
    ),
  );
}

【问题讨论】:

    标签: flutter dart timer


    【解决方案1】:

    使用Timers 的isActive 属性添加检查_timer 是否已处于活动状态。如果它已经处于活动状态,则不会创建新的。

    例子:

    void startTimer() {
      const oneSec = const Duration(seconds: 1);
      if(!_timer?.isActive) {
        _timer = new Timer.periodic(
          oneSec,
          (Timer timer) => setState(
            () {
              if (_start < 1) {
                timer.cancel();
              } else {
                _start = _start - 1;
              }
            },
          ),
        );
      }
    }
    

    【讨论】:

    • 我尝试了您的解决方案并且我得到了它,但是当我在自己的项目中使用相同的逻辑时,它只是一个帮助我学习的项目,if(!_timer?.isActive) 不起作用。我将其更改为if(_timer !=null),它在我的特定代码中确实有效。感谢您的解决方案!
    【解决方案2】:

    接收者不能为空,因此可识别空的运算符'?.'是不必要的。 改变这个:

    if(!_timer?.isActive)

    if(!_timer.isActive)

    【讨论】:

    • 是的,如果您使用具有 null 安全性的颤振,这是必要的。 !_timer?.isActive 表示你检查 _timer 是否为空。仅供参考:dart.dev/null-safety 而且这也不是那个问题的答案。
    猜你喜欢
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    相关资源
    最近更新 更多