ExpiringPeriodicTimer constructor
ExpiringPeriodicTimer({})
Constructor.
The ExpiringPeriodicTimer will expire after the total
amount of time
has elapsed. The optional onFinish
callback will be invoked upon
expiration.
Until the timer expires, onTick
will be invoked periodically every
interval
with the amount of time left before expiration.
Implementation
ExpiringPeriodicTimer({
required Duration total,
required Duration interval,
required void Function(Duration timeLeft) onTick,
void Function()? onFinish,
}) : _endTime = clock.now().add(total),
_interval = interval,
_onTick = onTick,
_onFinish = onFinish {
// Schedule the periodic [Timer] first to try to ensure that it fires first
// if it coincides with the completion [Timer].
_periodicTimer = Timer.periodic(_interval, (_) {
_onTick(_endTime.difference(clock.now()));
});
_completionTimer = Timer(total, () {
_periodicTimer.cancel();
_onFinish?.call();
});
}