Флаттер: как остановить таймер через N секунд?

Я использую приведенный ниже код для запуска таймера

Фрагмент таймера:

 _increamentCounter() {
    Timer.periodic(Duration(seconds: 2), (timer) {
       setState(() {
         _counter++;
       });
    });
  }


 RaisedButton raisedButton =
        new RaisedButton(child: new Text("Button"), onPressed: () {
            _increamentCounter();
        });

Все, что я хочу, это остановить этот таймер через определенный (N) интервал таймера.

2 ответа

Поскольку вы хотите отменить Timerчерез определенное количество интервалов, а не через определенное время, возможно, это решение более подходит, чем другие ответы?

Timer _incrementCounterTimer;


_incrementCounter() {
    _incrementCounterTimer = Timer.periodic(Duration(seconds: 2), (timer) {     
        counter++; 

        if( counter == 5 ) // <-- Change this to your preferred value of N
            _incrementCounterTimer.cancel();

        setState(() {});
    });
}


 RaisedButton raisedButton = new RaisedButton(
    child: new Text("Button"), 
    onPressed: () { _incrementCounter(); }
 );

В качестве альтернативы Future.delayed()Вы также можете использовать

Timer(const Duration(seconds: n), () => _increamentCounter());

Timer класс выставляет пару дополнительных методов, таких как .cancel(), .tick, а также isActiveТак что предпочитайте, если вы видите, что нуждаетесь в них в будущем.

Вы можете использовать Future.delayed.

Future.delayed(const Duration(seconds: n), () => _increamentCounter());
Другие вопросы по тегам