Client/lib/widget/animatedTime.dart

60 lines
1.6 KiB
Dart

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<AnimatedTime> createState() => _AnimatedTimeState();
}
class _AnimatedTimeState extends State<AnimatedTime> {
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();
}
}