【Flutter/Dart】定期的に関数を呼び出す方法:Timerを用いた実装

こんにちは、エキサイトでアプリエンジニアをしている岡島です。

今回はDartを用いて、定期的に関数を実行したい時にどうすればいいか、Timerを用いた実装を紹介していきます。

はじめに

開発をしていると、定期的にAPIからデータを取得したい場合のように、特定の関数を一定間隔おきに実行したいケースがあります。そのような時に、DartのTimerクラスを活用することができます。

Timerの基本的な使い方

一度だけ実行する場合

Duration(seconds: 〇〇)というように実行したいタイミングを指定することができます。 以下の例では2秒後に実行されますが、dayshoursminutesなども設定できます。

詳しくは下記ドキュメントを参照ください。

Duration class - dart:core library - Dart API

Timer(Duration(seconds: 2), () {
 print('2秒後に実行されます');
});

一定間隔ごとに実行する場合

Timer.periodicを利用して、インターバルの時間を設定することができます。

以下の例では5秒ごとに実行されます。

Timer.periodic(Duration(seconds: 5), (timer) {
  print('5秒ごとに実行されます');
});

Timerを停止する

Timer.periodicを使用していると、アプリがバックグラウンドに移行した時など、特定の条件でTimerを停止したくなる場合があります。

そのような時にはtimer.cancel();を使用します。

以下に1秒ごとにカウントをインクリメントし、5回になったらタイマーを止めるサンプルプログラムを書いてみました。

import 'dart:async';

int counter = 0;

void fetchData() {
  print('データを取得しました');
  counter++;
}

void main() {
  Timer.periodic(Duration(seconds: 1), (timer) {
    fetchData();

    if (counter == 5) {
      timer.cancel();
      print('Timerが停止しました');
    }
  });
}

まとめ

このように、定期的に処理を実行したい場合、DartのTimerクラスを活用することで実装ができます。Riverpodなどの状態管理パッケージとTimerを組み合わせることで、複雑なアプリケーションでもタイマー処理を適切に管理することができます。

読んでいただき、ありがとうございました。