mobile_bottom_menu.dart 5.4 KB

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