selfprivacy.org.app/lib/ui/components/brand_timer/brand_timer.dart

87 lines
2.0 KiB
Dart
Raw Normal View History

2021-01-06 21:25:53 +02:00
import 'dart:async';
2022-02-16 09:28:29 +02:00
import 'package:easy_localization/easy_localization.dart';
2021-01-06 21:25:53 +02:00
import 'package:flutter/material.dart';
import 'package:selfprivacy/ui/components/brand_text/brand_text.dart';
import 'package:selfprivacy/utils/named_font_weight.dart';
class BrandTimer extends StatefulWidget {
const BrandTimer({
2021-03-15 17:39:44 +02:00
required this.startDateTime,
required this.duration,
super.key,
2022-06-05 22:36:32 +03:00
});
2021-01-06 21:25:53 +02:00
2021-03-23 21:50:11 +02:00
final DateTime startDateTime;
final Duration duration;
2021-01-06 21:25:53 +02:00
@override
State<BrandTimer> createState() => _BrandTimerState();
2021-01-06 21:25:53 +02:00
}
class _BrandTimerState extends State<BrandTimer> {
2021-03-15 17:39:44 +02:00
String? _timeString;
late Timer timer;
2021-01-06 21:25:53 +02:00
@override
void initState() {
2021-01-19 14:05:40 +02:00
_timerStart();
super.initState();
}
void _timerStart() {
2022-02-16 09:28:29 +02:00
_timeString = differenceFromStart;
2022-06-05 22:36:32 +03:00
timer = Timer.periodic(const Duration(seconds: 1), (final Timer t) {
final Duration timePassed =
DateTime.now().difference(widget.startDateTime);
2021-03-23 21:50:11 +02:00
if (timePassed > widget.duration) {
2021-01-06 21:25:53 +02:00
t.cancel();
} else {
_getTime();
}
});
2021-01-19 14:05:40 +02:00
}
@override
2022-06-05 22:36:32 +03:00
void didUpdateWidget(final BrandTimer oldWidget) {
2021-01-19 14:05:40 +02:00
if (timer.isActive) {
timer.cancel();
}
_timerStart();
super.didUpdateWidget(oldWidget);
2021-01-06 21:25:53 +02:00
}
@override
2022-06-05 22:36:32 +03:00
Widget build(final BuildContext context) => BrandText.medium(
_timeString,
style: const TextStyle(
fontWeight: NamedFontWeight.demiBold,
),
);
2021-01-06 21:25:53 +02:00
void _getTime() {
setState(() {
2022-02-16 09:28:29 +02:00
_timeString = differenceFromStart;
2021-01-06 21:25:53 +02:00
});
}
2022-02-16 09:28:29 +02:00
String get differenceFromStart =>
2021-03-23 21:50:11 +02:00
_durationToString(DateTime.now().difference(widget.startDateTime));
2021-01-06 21:25:53 +02:00
2022-06-05 22:36:32 +03:00
String _durationToString(final Duration duration) {
final Duration timeLeft = widget.duration - duration;
String twoDigits(final int n) => n.toString().padLeft(2, '0');
final String twoDigitSeconds = twoDigits(timeLeft.inSeconds);
2021-01-06 21:25:53 +02:00
2022-05-24 21:55:39 +03:00
return 'timer.sec'.tr(args: [twoDigitSeconds]);
2021-01-06 21:25:53 +02:00
}
@override
void dispose() {
if (timer.isActive) {
timer.cancel();
}
super.dispose();
}
}