code_timer_progress.dart 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import 'dart:async';
  2. import 'package:flutter/material.dart';
  3. import 'package:flutter_animation_progress_bar/flutter_animation_progress_bar.dart';
  4. class CodeTimerProgress extends StatefulWidget {
  5. final int period;
  6. CodeTimerProgress({
  7. Key? key,
  8. required this.period,
  9. }) : super(key: key);
  10. @override
  11. _CodeTimerProgressState createState() => _CodeTimerProgressState();
  12. }
  13. class _CodeTimerProgressState extends State<CodeTimerProgress> {
  14. Timer? _everySecondTimer;
  15. late int _timeRemaining;
  16. @override
  17. void initState() {
  18. super.initState();
  19. _timeRemaining = widget.period;
  20. _updateTimeRemaining();
  21. _everySecondTimer =
  22. Timer.periodic(const Duration(milliseconds: 200), (Timer t) {
  23. _updateTimeRemaining();
  24. });
  25. }
  26. void _updateTimeRemaining() {
  27. int newTimeRemaining =
  28. widget.period - (DateTime.now().second % widget.period);
  29. if (newTimeRemaining != _timeRemaining) {
  30. setState(() {
  31. _timeRemaining = newTimeRemaining;
  32. });
  33. }
  34. }
  35. @override
  36. void dispose() {
  37. _everySecondTimer?.cancel();
  38. super.dispose();
  39. }
  40. @override
  41. Widget build(BuildContext context) {
  42. return FAProgressBar(
  43. currentValue: _timeRemaining / widget.period * 100,
  44. size: 4,
  45. animatedDuration: const Duration(milliseconds: 200),
  46. progressColor: Colors.orange,
  47. changeColorValue: 40,
  48. changeProgressColor: Colors.green,
  49. );
  50. }
  51. }