Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 
 
 

91 строка
2.3 KiB

  1. import 'dart:async';
  2. import 'package:flutter/material.dart';
  3. import './hours_minutes_seconds.dart';
  4. import './num_tools.dart';
  5. class AptSimpleTimerController {
  6. late Timer timer;
  7. late ShowAptSimpleTimerWithController controller;
  8. }
  9. class AptSimpleTimerWithController extends StatefulWidget {
  10. final int seconds;
  11. final Color timerColor;
  12. final double fontSize;
  13. final Function? onTimerEnd;
  14. final AptSimpleTimerController? controller;
  15. AptSimpleTimerWithController({
  16. required this.seconds,
  17. this.timerColor = Colors.black,
  18. this.fontSize = 14,
  19. this.onTimerEnd,
  20. this.controller,
  21. });
  22. @override
  23. State<StatefulWidget> createState() =>
  24. ShowAptSimpleTimerWithController(seconds, controller);
  25. }
  26. class ShowAptSimpleTimerWithController
  27. extends State<AptSimpleTimerWithController> {
  28. int seconds;
  29. late Timer timer;
  30. AptSimpleTimerController? controller;
  31. ShowAptSimpleTimerWithController(this.seconds, this.controller) {
  32. timer = Timer.periodic(Duration(seconds: 1), (Timer timer) {
  33. if (seconds > 0) {
  34. setState(() {
  35. seconds--;
  36. });
  37. } else {
  38. if (widget.onTimerEnd != null) widget.onTimerEnd!();
  39. }
  40. });
  41. controller?.timer = timer;
  42. controller?.controller = this;
  43. }
  44. reBuild(int s) {
  45. seconds = s;
  46. timer = Timer.periodic(Duration(seconds: 1), (Timer timer) {
  47. if (seconds > 0) {
  48. setState(() {
  49. seconds--;
  50. });
  51. } else {
  52. if (widget.onTimerEnd != null) {
  53. widget.onTimerEnd!();
  54. }
  55. }
  56. });
  57. controller?.timer = timer;
  58. }
  59. @override
  60. Widget build(BuildContext context) {
  61. var t = HoursMinutesSeconds(seconds);
  62. return Text(
  63. formatNum(
  64. ' ( ${(t.getDays() != 0) ? ' ${t.getMinutes() < 10 ? '0${t.getMinutes()}' : t.getMinutes()} '
  65. ': ${t.getSeconds() < 10 ? '0${t.getSeconds()}' : t.getSeconds()}' : ''
  66. '${t.getMinutes() < 10 ? '0${t.getMinutes()}' : t.getMinutes()} '
  67. ': ${t.getSeconds() < 10 ? '0${t.getSeconds()}' : t.getSeconds()}'} )',
  68. divide: false),
  69. textAlign: TextAlign.center,
  70. style: TextStyle(
  71. color: widget.timerColor,
  72. fontSize: widget.fontSize,
  73. ),
  74. );
  75. }
  76. @override
  77. void dispose() {
  78. timer.cancel();
  79. super.dispose();
  80. }
  81. }