createTimerStream function
Creates a stream tha produces DateTime objects at the times specified by the generator
.
Stops the stream when stopSignal
is received.
Implementation
Stream<DateTime> createTimerStream(
TimerGenerator generator,
Future stopSignal,
) async* {
for (var now = DateTime.now(), next = generator(now);
next != null;
now = DateTime.now(), next = generator(now)) {
if (now.compareTo(next) > 0) continue;
Duration waitTime = next.difference(now);
try {
await stopSignal.timeout(waitTime);
return;
} on TimeoutException catch (_) {
yield next;
}
}
}