switch_loop_button.dart 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import 'package:fis_i18n/i18n.dart';
  2. import 'package:fis_measure/interfaces/process/player/play_controller.dart';
  3. import 'package:fis_measure/interfaces/process/workspace/exam_info.dart';
  4. import 'package:fis_measure/process/workspace/measure_controller.dart';
  5. import 'package:fis_measure/view/player/controller.dart';
  6. import 'package:fis_ui/base_define/page.dart';
  7. import 'package:fis_ui/index.dart';
  8. import 'package:fis_ui/widgets/functional/text_tooltip.dart';
  9. import 'package:flutter/material.dart';
  10. import 'package:get/get.dart';
  11. class SwitchPlayLoopButton extends StatefulWidget implements FWidget {
  12. const SwitchPlayLoopButton({
  13. super.key,
  14. required this.businessParent,
  15. });
  16. final FPage businessParent;
  17. @override
  18. State<SwitchPlayLoopButton> createState() => _SwitchRepeatButtonState();
  19. }
  20. class _SwitchRepeatButtonState extends State<SwitchPlayLoopButton>
  21. with TickerProviderStateMixin {
  22. bool _enableLoop = false;
  23. final measureController = Get.find<MeasureController>();
  24. late VidPlayerController playerController;
  25. @override
  26. void initState() {
  27. WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
  28. if (mounted) {
  29. _bindPlayerRepeat();
  30. }
  31. });
  32. measureController.imageLoaded.addListener(_onImageLoaded);
  33. super.initState();
  34. }
  35. @override
  36. void dispose() {
  37. measureController.imageLoaded.removeListener(_onImageLoaded);
  38. super.dispose();
  39. }
  40. void _onImageLoaded(Object _, ExamImageInfo? e) {
  41. _bindPlayerRepeat();
  42. }
  43. @override
  44. Widget build(BuildContext context) {
  45. return FSizedBox(
  46. width: 60,
  47. child: FColumn(
  48. children: [
  49. FTextTooltip(
  50. position: DisplayPosition.left,
  51. textStyle: const TextStyle(fontSize: 16, color: Colors.white),
  52. height: 36,
  53. message: i18nBook.measure.loopPlayback.t,
  54. margin: const EdgeInsets.only(right: 10),
  55. decoration: BoxDecoration(
  56. color: Colors.black.withOpacity(1.0),
  57. borderRadius: BorderRadius.circular(4),
  58. ),
  59. child: FInkWell(
  60. onTap: _onSwitchRepeat,
  61. child: FContainer(
  62. height: 34,
  63. margin: const EdgeInsets.only(
  64. top: 5,
  65. ),
  66. padding:
  67. const EdgeInsets.symmetric(horizontal: 10, vertical: 5),
  68. decoration: BoxDecoration(
  69. color: _enableLoop ? Colors.grey : Colors.transparent,
  70. borderRadius: BorderRadius.circular(5),
  71. ),
  72. child: FIcon(
  73. Icons.repeat,
  74. color: _enableLoop ? Colors.white : Colors.white,
  75. ),
  76. ),
  77. ),
  78. ),
  79. ],
  80. ),
  81. );
  82. }
  83. void _onSwitchRepeat() {
  84. final enableLoop = !_enableLoop;
  85. playerController.enableLoop = enableLoop;
  86. setState(() {
  87. _enableLoop = enableLoop;
  88. });
  89. }
  90. void _bindPlayerRepeat() {
  91. playerController = Get.find<IPlayerController>() as VidPlayerController;
  92. setState(() {
  93. _enableLoop = playerController.enableLoop;
  94. });
  95. }
  96. }