ente/lib/ui/code_timer_progress.dart

60 lines
1.4 KiB
Dart
Raw Normal View History

2023-02-11 11:22:08 +00:00
import 'package:flutter/material.dart';
2023-03-13 23:22:58 +00:00
import 'package:flutter/scheduler.dart';
2023-02-11 11:22:08 +00:00
import 'package:flutter_animation_progress_bar/flutter_animation_progress_bar.dart';
class CodeTimerProgress extends StatefulWidget {
final int period;
CodeTimerProgress({
Key? key,
required this.period,
}) : super(key: key);
@override
_CodeTimerProgressState createState() => _CodeTimerProgressState();
}
2023-03-13 23:22:58 +00:00
class _CodeTimerProgressState extends State<CodeTimerProgress>
with SingleTickerProviderStateMixin {
late final Ticker _ticker;
double _progress = 0.0;
late final int _microSecondsInPeriod;
2023-02-11 11:22:08 +00:00
@override
void initState() {
super.initState();
2023-03-13 23:22:58 +00:00
_microSecondsInPeriod = widget.period * 1000000;
_ticker = createTicker((elapsed) {
2023-02-11 11:22:08 +00:00
_updateTimeRemaining();
});
2023-03-13 23:22:58 +00:00
_ticker.start();
_updateTimeRemaining();
2023-02-11 11:22:08 +00:00
}
void _updateTimeRemaining() {
2023-03-13 23:22:58 +00:00
int timeRemaining = (_microSecondsInPeriod) -
(DateTime.now().microsecondsSinceEpoch % _microSecondsInPeriod);
setState(() {
_progress = (timeRemaining / _microSecondsInPeriod);
});
2023-02-11 11:22:08 +00:00
}
@override
void dispose() {
2023-03-13 23:22:58 +00:00
_ticker.dispose();
2023-02-11 11:22:08 +00:00
super.dispose();
}
@override
Widget build(BuildContext context) {
return FAProgressBar(
2023-03-13 23:22:58 +00:00
currentValue: _progress * 100,
2023-02-11 11:22:08 +00:00
size: 4,
2023-03-13 23:22:58 +00:00
animatedDuration: const Duration(milliseconds: 10),
2023-02-11 11:22:08 +00:00
progressColor: Colors.orange,
changeColorValue: 40,
changeProgressColor: Colors.green,
);
}
}