timer static method
Implementation
static Future<StreamSubscription<void>> timer({
required String id,
required String title,
String? subtitle,
required Duration duration,
void Function()? onExpired,
}) async {
final endTime = DateTime.now().add(duration);
final total = duration.inSeconds.toDouble();
await start(id: id, data: LiveActivityData(title: title, subtitle: subtitle, progress: 0, trailingText: _fmt(duration)));
final sub = Stream<void>.periodic(const Duration(seconds: 1)).listen((_) async {
final remaining = endTime.difference(DateTime.now());
if (remaining.isNegative) {
await update(id: id, data: LiveActivityData(title: '$title — Arrived!', subtitle: subtitle, progress: 1));
await Future.delayed(const Duration(seconds: 3));
await end(id);
onExpired?.call();
} else {
await update(id: id, data: LiveActivityData(title: title, subtitle: subtitle,
progress: ((total - remaining.inSeconds) / total).clamp(0, 1), trailingText: _fmt(remaining)));
}
});
return sub;
}