Flutter 如何在创建新计时器之前检查计时器是否处于活动状态

Flutter 如何在创建新计时器之前检查计时器是否处于活动状态,flutter,dart,timer,Flutter,Dart,Timer,我在另一个线程上遇到了计时器的代码。同时按下raised按钮多次时,每次单击都会增加-1秒,从而增加减少的速率 关于检查计时器是否已激活以及是否不让RaisedButton创建新计时器的最简单方法,您有什么想法吗。谢谢 import 'dart:async'; [...] Timer _timer; int _start = 10; void startTimer() { const oneSec = const Duration(seconds: 1); _timer = new

我在另一个线程上遇到了计时器的代码。同时按下
raised按钮
多次时,每次单击都会增加-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")
      ],
    ),
  );
}
导入'dart:async';
[...]
定时器(u定时器),;
int _start=10;
void startTimer(){
const oneSec=const持续时间(秒:1);
_定时器=新定时器。周期性(
一秒,
(计时器)=>设置状态(
() {
如果(_start<1){
timer.cancel();
}否则{
_开始=_开始-1;
}
},
),
);
}
@凌驾
无效处置(){
_timer.cancel();
super.dispose();
}
小部件构建(构建上下文){
归还新脚手架(
appBar:appBar(标题:文本(“计时器测试”)),
正文:专栏(
儿童:[
升起的按钮(
已按下:(){
startTimer();
},
子项:文本(“开始”),
),
文本($\u开始)
],
),
);
}

使用
timer
s的
isActive
属性添加检查,查看
\u 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;
          }
        },
      ),
    );
  }
}
void startTimer(){
const oneSec=const持续时间(秒:1);
如果(!\u定时器?.isActive){
_定时器=新定时器。周期性(
一秒,
(计时器)=>设置状态(
() {
如果(_start<1){
timer.cancel();
}否则{
_开始=_开始-1;
}
},
),
);
}
}

我尝试了您的解决方案,并使其发挥了作用。但是,当我在自己的项目中使用相同的逻辑时,尽管这只是一个帮助我学习的项目,
如果(!\u timer?.isActive)
不起作用。我将其更改为
if(_timer!=null)
,这在我的特定代码中确实有效。谢谢你的解决方案!