mobile_bottom_menu.dart 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. import 'package:fis_measure/interfaces/enums/annotation.dart';
  2. import 'package:fis_measure/interfaces/process/player/play_controller.dart';
  3. import 'package:fis_measure/interfaces/process/workspace/application.dart';
  4. import 'package:fis_measure/interfaces/process/workspace/mobile_measure_view_state_controller.dart';
  5. import 'package:fis_measure/process/workspace/measure_handler.dart';
  6. import 'package:fis_measure/view/mobile_view/controller/mobile_measure_view_state_controller.dart';
  7. import 'package:fis_measure/view/mobile_view/mobile_control_board/mobile_control_board.dart';
  8. import 'package:fis_measure/view/mobile_view/mobile_control_board/next_btn.dart';
  9. import 'package:fis_measure/view/mobile_view/mobile_control_board/play_btn.dart';
  10. import 'package:fis_measure/view/mobile_view/mobile_control_board/prev_btn.dart';
  11. import 'package:fis_measure/view/mobile_view/widgets/icon_btn.dart';
  12. import 'package:fis_measure/view/player/controller.dart';
  13. import 'package:flutter/material.dart';
  14. import 'package:get/get.dart';
  15. class MobileBottomMenu extends StatefulWidget {
  16. const MobileBottomMenu({
  17. Key? key,
  18. }) : super(key: key);
  19. @override
  20. State<StatefulWidget> createState() => _MobileBottomMenuState();
  21. }
  22. class _MobileBottomMenuState extends State<MobileBottomMenu> {
  23. final application = Get.find<IApplication>();
  24. late final measureHandler = Get.find<MeasureHandler>();
  25. final mobileMeasureStateController =
  26. Get.find<MobileMeasureViewStateController>();
  27. late final playerController = Get.find<IPlayerController>();
  28. @override
  29. void initState() {
  30. mobileMeasureStateController.onModeChanged.addListener(_onViewModeChanged);
  31. if ((playerController as VidPlayerController).totalFramesCount > 1) {
  32. setState(() {
  33. singleFrame = false;
  34. ifShowProgressBar = true;
  35. });
  36. }
  37. super.initState();
  38. }
  39. @override
  40. void dispose() {
  41. mobileMeasureStateController.onModeChanged
  42. .removeListener(_onViewModeChanged);
  43. super.dispose();
  44. }
  45. bool singleFrame = true;
  46. bool ifShowProgressBar = false;
  47. bool ifShowMeasureBtn = true;
  48. bool ifShowAnnotationBtn = true;
  49. void _onViewModeChanged(Object s, MobileMeasureMode mode) {
  50. switch (mode) {
  51. case MobileMeasureMode.playerMode:
  52. setState(() {
  53. ifShowProgressBar = !singleFrame;
  54. ifShowMeasureBtn = true;
  55. ifShowAnnotationBtn = true;
  56. });
  57. break;
  58. case MobileMeasureMode.measureMode:
  59. setState(() {
  60. ifShowProgressBar = false;
  61. ifShowMeasureBtn = false;
  62. ifShowAnnotationBtn = true;
  63. });
  64. break;
  65. case MobileMeasureMode.annotationMode:
  66. setState(() {
  67. ifShowProgressBar = false;
  68. ifShowMeasureBtn = true;
  69. ifShowAnnotationBtn = false;
  70. });
  71. break;
  72. }
  73. }
  74. @override
  75. Widget build(BuildContext context) {
  76. return _buildVidPlayerBoard();
  77. }
  78. Widget _buildVidPlayerBoard() {
  79. return Stack(alignment: Alignment.bottomCenter, children: [
  80. ifShowProgressBar
  81. ? SizedBox(
  82. height: 150,
  83. child: MobileVidControlBoard(
  84. playerController as VidPlayerController,
  85. ),
  86. )
  87. : Container(),
  88. SizedBox(
  89. height: 75,
  90. child: Container(
  91. margin: const EdgeInsets.fromLTRB(40, 20, 20, 10),
  92. child: Row(
  93. children: [
  94. if (ifShowProgressBar) ...[
  95. SinglePrevButton(),
  96. SinglePlayButton(),
  97. SingleNextButton(),
  98. Expanded(
  99. child: SizedBox(
  100. height: 1,
  101. width: MediaQuery.of(context).size.width,
  102. ),
  103. ),
  104. ],
  105. SingleIconButton(
  106. icon: Icons.tune,
  107. onPressed: () {
  108. print("打开图像参数设置");
  109. },
  110. ),
  111. ifShowMeasureBtn
  112. ? SingleIconButton(
  113. icon: Icons.straighten,
  114. onPressed: () {
  115. print("进入测量模式");
  116. mobileMeasureStateController.currentMode =
  117. MobileMeasureMode.measureMode;
  118. },
  119. )
  120. : Container(),
  121. ifShowAnnotationBtn
  122. ? SingleIconButton(
  123. icon: Icons.more,
  124. onPressed: () {
  125. measureHandler.changedAnnotationType =
  126. AnnotationType.label;
  127. application.switchAnnotation(AnnotationType.label);
  128. mobileMeasureStateController.currentMode =
  129. MobileMeasureMode.annotationMode;
  130. },
  131. )
  132. : Container(),
  133. ],
  134. ),
  135. ),
  136. )
  137. ]);
  138. }
  139. }