import 'dart:async'; import 'package:animated_digit/animated_digit.dart'; import 'package:flutter/material.dart'; class AnimatedTime extends StatefulWidget { final Duration Function() callback; const AnimatedTime({super.key, required this.callback}); @override State createState() => _AnimatedTimeState(); } class _AnimatedTimeState extends State { Duration current = Duration.zero; late Timer timer; @override void initState() { super.initState(); timer = Timer.periodic(const Duration(seconds: 1), (Timer t) => update()); current = widget.callback(); } void update() { setState(() { current = widget.callback(); }); } @override Widget build(BuildContext context) => Row( children: [ const Text('Noch '), buildWidget(current.inDays), const Text(' Tage, '), buildWidget(current.inHours > 24 ? current.inHours - current.inDays * 24 : current.inHours), const Text(':'), buildWidget(current.inMinutes > 60 ? current.inMinutes - current.inHours * 60 : current.inMinutes), const Text(':'), buildWidget(current.inSeconds > 60 ? current.inSeconds - current.inMinutes * 60 : current.inSeconds), ], ); AnimatedDigitWidget buildWidget(int value) => AnimatedDigitWidget( value: value, duration: const Duration(milliseconds: 100), textStyle: TextStyle( fontSize: 15, color: Theme.of(context).colorScheme.onSurface, ), ); @override void dispose() { timer.cancel(); super.dispose(); } }