mobile_top_menu.dart 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. import 'package:fis_measure/interfaces/process/workspace/application.dart';
  2. import 'package:fis_measure/interfaces/process/workspace/mobile_measure_view_state_controller.dart';
  3. import 'package:fis_measure/process/workspace/measure_handler.dart';
  4. import 'package:fis_measure/view/mobile_view/controller/mobile_measure_view_state_controller.dart';
  5. import 'package:fis_measure/view/mobile_view/widgets/icon_btn.dart';
  6. import 'package:flutter/material.dart';
  7. import 'package:get/get.dart';
  8. class MobileTopMenu extends StatefulWidget {
  9. final VoidCallback capturePng;
  10. const MobileTopMenu({
  11. Key? key,
  12. required this.capturePng,
  13. }) : super(key: key);
  14. @override
  15. State<StatefulWidget> createState() => _MobileTopMenuState();
  16. }
  17. class _MobileTopMenuState extends State<MobileTopMenu> {
  18. final application = Get.find<IApplication>();
  19. final measureHandler = Get.find<MeasureHandler>();
  20. final mobileMeasureStateController =
  21. Get.find<MobileMeasureViewStateController>();
  22. @override
  23. void initState() {
  24. mobileMeasureStateController.onModeChanged.addListener(_onViewModeChanged);
  25. super.initState();
  26. }
  27. @override
  28. void dispose() {
  29. mobileMeasureStateController.onModeChanged
  30. .removeListener(_onViewModeChanged);
  31. super.dispose();
  32. }
  33. MobileMeasureMode curMode = MobileMeasureMode.playerMode;
  34. void _onViewModeChanged(Object s, MobileMeasureMode mode) {
  35. setState(() {
  36. curMode = mode;
  37. });
  38. }
  39. @override
  40. Widget build(BuildContext context) {
  41. return Column(
  42. mainAxisSize: MainAxisSize.max,
  43. mainAxisAlignment: MainAxisAlignment.start,
  44. children: [
  45. SizedBox(
  46. height: 50,
  47. child: Container(
  48. padding: const EdgeInsets.only(left: 10),
  49. child: Row(
  50. mainAxisAlignment: MainAxisAlignment.start,
  51. children: [
  52. ..._buttons(),
  53. ],
  54. ),
  55. ),
  56. ),
  57. ],
  58. );
  59. }
  60. List<Widget> _buttons() {
  61. switch (curMode) {
  62. case MobileMeasureMode.playerMode:
  63. return [
  64. _fillCustomSpace(10),
  65. _backBtn(),
  66. _fillEmptySpace(),
  67. _saveBtn(),
  68. _editBtn(),
  69. _shareBtn(),
  70. _fillCustomSpace(150)
  71. ];
  72. case MobileMeasureMode.measureMode:
  73. return [
  74. _exitBtn(),
  75. const Text('测量模式'),
  76. _fillEmptySpace(),
  77. _saveBtn(),
  78. _deleteBtn(),
  79. _undoBtn(),
  80. ];
  81. case MobileMeasureMode.annotationMode:
  82. return [
  83. _exitBtn(),
  84. const Text('注释模式'),
  85. _fillEmptySpace(),
  86. _annotationBtn(),
  87. _arrowBtn(),
  88. _saveBtn(),
  89. _deleteBtn(),
  90. _undoBtn(),
  91. ];
  92. default:
  93. return [Container()];
  94. }
  95. }
  96. Widget _saveBtn() {
  97. return SingleIconButton(
  98. icon: Icons.save,
  99. onPressed: () {
  100. widget.capturePng();
  101. },
  102. );
  103. }
  104. Widget _shareBtn() {
  105. return SingleIconButton(
  106. icon: Icons.share,
  107. onPressed: () {
  108. print("call 分享");
  109. },
  110. );
  111. }
  112. Widget _editBtn() {
  113. return SingleIconButton(
  114. icon: Icons.edit,
  115. onPressed: () {
  116. print("call 进入撰写报告");
  117. },
  118. );
  119. }
  120. Widget _backBtn() {
  121. return SingleIconButton(
  122. icon: Icons.arrow_back_ios_new,
  123. onPressed: () {
  124. print("call 返回");
  125. },
  126. );
  127. }
  128. Widget _exitBtn() {
  129. return SingleIconButton(
  130. icon: Icons.exit_to_app,
  131. onPressed: () {
  132. print("call 退出当前模式");
  133. mobileMeasureStateController.currentMode = MobileMeasureMode.playerMode;
  134. },
  135. );
  136. }
  137. Widget _annotationBtn() {
  138. return SingleIconButton(
  139. icon: Icons.abc,
  140. onPressed: () {
  141. print("call 注释模式");
  142. },
  143. );
  144. }
  145. Widget _arrowBtn() {
  146. return SingleIconButton(
  147. icon: Icons.compare_arrows_rounded,
  148. onPressed: () {
  149. print("call 箭头模式");
  150. },
  151. );
  152. }
  153. Widget _deleteBtn() {
  154. return SingleIconButton(
  155. icon: Icons.delete_outline,
  156. onPressed: () {
  157. application.clearRecords();
  158. },
  159. );
  160. }
  161. Widget _undoBtn() {
  162. return SingleIconButton(
  163. icon: Icons.redo,
  164. onPressed: () {
  165. application.undoRecord();
  166. },
  167. );
  168. }
  169. Widget _fillEmptySpace() {
  170. return Expanded(
  171. child: SizedBox(
  172. height: 1,
  173. width: MediaQuery.of(context).size.width,
  174. ),
  175. );
  176. }
  177. Widget _fillCustomSpace(double width) {
  178. return SizedBox(
  179. width: width,
  180. );
  181. }
  182. }