【Flutter】Timerで一定間隔で処理を行う

対象者

  • Flutterで一定の間隔で処理を実施したい人

はじめに

Timerを使って、一定間隔でなにかを実施する方法を説明します。
アイコンをアニメーションさせようと思いました。しかし、それほど気合いを入れる気もなかったので、1秒間隔で変数を変えて、アイコンの傾きを変えることで対応しました。

// タイマー開始
final _timer = Timer.periodic(Duration(seconds: 1), (_) {
    print('called in tinmer');
});
  
// タイマー停止
_timer.cancel();

Timer(Duration(seconds: 1),(_){})だと1秒後に実施されて、Future.delayed(Duration(seconds: 1))と同様の動作をする。

注意点

Timerは再利用できない

Timerを一度cancelすると、繰り返し処理を再開することはできない。新しいTimerを作成する

late を使うと処理が開始されない

実行したい処理の中でクラスのメンバー変数があったため、以下のようにlateを使った。処理自体はこの中で完結しているため、cancelするまで呼び出さない。そのため、参照することがなかったので、呼び出されず、Timerがスタートしなかった。
結局 initStateで「_timer.tick」をムダに呼び出してスタートさせた。

late final _timer = Timer.periodic(Duration(seconds: 1), (_) {

アプリが画面に出てなくても処理が続く

TImerの実験中に、他のFlutterアプリを起動したら、そちらのターミナルでも呼び出しのメッセージが表示された。
仕様次第だけど、アプリから離れるときにcancelして、アプリに入ったときにTimerを再生成する必要がありそう。

まとめ

Timerの使用方法をまとめました。また、個人的な注意点も記載しました。