123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- import 'dart:async';
- typedef void OnTimerTickCallback(int millisUntilFinished);
- class TimerUtils {
-
-
- TimerUtils({this.mDuration = Duration.millisecondsPerSecond, this.mTotalTime = 0});
-
- Timer? _mTimer;
-
- bool _isActive = false;
-
- int mDuration;
-
- int mTotalTime;
-
- OnTimerTickCallback? _onTimerTickCallback;
-
- void setInterval(int interval) {
- if (interval <= 0) interval = Duration.millisecondsPerSecond;
- mDuration = interval;
- }
-
- void setTotalTime(int totalTime) {
- if (totalTime <= 0) return;
- mTotalTime = totalTime;
- }
-
- void startDelayTimer() {
- _mTimer = Timer(Duration(milliseconds: mDuration), () {
- _doCallback(0);
- });
- }
-
- void startPeriodicTimer() {
- if (_isActive || mDuration <= 0) return;
- _isActive = true;
- Duration duration = Duration(milliseconds: mDuration);
- _doCallback(0);
- _mTimer = Timer.periodic(duration, (Timer timer) {
- _doCallback(timer.tick);
- });
- }
-
- void startCountDown() {
- if (_isActive || mDuration <= 0 || mTotalTime <= 0) return;
- _isActive = true;
- Duration duration = Duration(milliseconds: mDuration);
- _doCallback(mTotalTime);
- _mTimer = Timer.periodic(duration, (Timer timer) {
- int time = mTotalTime - mDuration;
- mTotalTime = time;
- if (time >= mDuration) {
- _doCallback(time);
- } else if (time == 0) {
- _doCallback(time);
- cancel();
- } else {
- timer.cancel();
- Future.delayed(Duration(milliseconds: time), () {
- mTotalTime = 0;
- _doCallback(0);
- cancel();
- });
- }
- });
- }
- void _doCallback(int time) {
- if (_onTimerTickCallback != null) {
- _onTimerTickCallback!(time);
- }
- }
-
- void updateTotalTime(int totalTime) {
- cancel();
- mTotalTime = totalTime;
- startCountDown();
- }
-
- bool isActive() {
- return _isActive;
- }
-
- void cancel() {
- if (_mTimer != null) {
- if (_mTimer!.isActive) {
- _mTimer?.cancel();
- }
- _mTimer = null;
- }
- _isActive = false;
- }
-
- void setOnTimerTickCallback(OnTimerTickCallback callback) {
- _onTimerTickCallback = callback;
- }
- }
|