こんにちは、エキサイトでアプリエンジニアをしている岡島です。
今回はDartを用いて、定期的に関数を実行したい時にどうすればいいか、Timerを用いた実装を紹介していきます。
はじめに
開発をしていると、定期的にAPIからデータを取得したい場合のように、特定の関数を一定間隔おきに実行したいケースがあります。そのような時に、DartのTimerクラスを活用することができます。
Timerの基本的な使い方
一度だけ実行する場合
Duration(seconds: 〇〇)
というように実行したいタイミングを指定することができます。
以下の例では2秒後に実行されますが、days
やhours
、minutes
なども設定できます。
詳しくは下記ドキュメントを参照ください。
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を組み合わせることで、複雑なアプリケーションでもタイマー処理を適切に管理することができます。
読んでいただき、ありがとうございました。