Initial commit
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
||||
class PlayerClockText extends StatefulWidget {
|
||||
const PlayerClockText({super.key, this.style});
|
||||
|
||||
final TextStyle? style;
|
||||
|
||||
@override
|
||||
State<PlayerClockText> createState() => _PlayerClockTextState();
|
||||
}
|
||||
|
||||
class _PlayerClockTextState extends State<PlayerClockText> {
|
||||
Timer? _timer;
|
||||
late String _text;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_text = formatClock(DateTime.now());
|
||||
_scheduleNextTick();
|
||||
}
|
||||
|
||||
void _scheduleNextTick() {
|
||||
final now = DateTime.now();
|
||||
final next = DateTime(
|
||||
now.year,
|
||||
now.month,
|
||||
now.day,
|
||||
now.hour,
|
||||
now.minute,
|
||||
).add(const Duration(minutes: 1));
|
||||
_timer = Timer(next.difference(now), _tick);
|
||||
}
|
||||
|
||||
void _tick() {
|
||||
if (!mounted) return;
|
||||
setState(() => _text = formatClock(DateTime.now()));
|
||||
_scheduleNextTick();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_timer?.cancel();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Text(
|
||||
_text,
|
||||
style:
|
||||
widget.style ??
|
||||
const TextStyle(
|
||||
color: Colors.white70,
|
||||
fontSize: 12,
|
||||
height: 1.0,
|
||||
letterSpacing: 0.5,
|
||||
fontFeatures: [FontFeature.tabularFigures()],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
String formatClock(DateTime t) {
|
||||
final h = t.hour.toString().padLeft(2, '0');
|
||||
final m = t.minute.toString().padLeft(2, '0');
|
||||
return '$h:$m';
|
||||
}
|
||||
Reference in New Issue
Block a user