mobile_top_menu.dart 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. import 'package:fis_measure/interfaces/enums/annotation.dart';
  2. import 'package:fis_measure/interfaces/process/workspace/application.dart';
  3. import 'package:fis_measure/interfaces/process/workspace/mobile_measure_view_state_controller.dart';
  4. import 'package:fis_measure/process/workspace/measure_handler.dart';
  5. import 'package:fis_measure/view/mobile_view/controller/mobile_measure_view_state_controller.dart';
  6. import 'package:fis_measure/view/mobile_view/widgets/animated_icon_btn.dart';
  7. import 'package:fis_measure/view/mobile_view/widgets/icon_btn.dart';
  8. import 'package:flutter/material.dart';
  9. import 'package:get/get.dart';
  10. class MobileTopMenu extends StatefulWidget {
  11. final VoidCallback capturePng;
  12. const MobileTopMenu({
  13. Key? key,
  14. required this.capturePng,
  15. }) : super(key: key);
  16. @override
  17. State<StatefulWidget> createState() => _MobileTopMenuState();
  18. }
  19. class _MobileTopMenuState extends State<MobileTopMenu> {
  20. final application = Get.find<IApplication>();
  21. final measureHandler = Get.find<MeasureHandler>();
  22. final mobileMeasureStateController =
  23. Get.find<MobileMeasureViewStateController>();
  24. @override
  25. void initState() {
  26. mobileMeasureStateController.onModeChanged.addListener(_onViewModeChanged);
  27. super.initState();
  28. }
  29. @override
  30. void dispose() {
  31. mobileMeasureStateController.onModeChanged
  32. .removeListener(_onViewModeChanged);
  33. super.dispose();
  34. }
  35. MobileMeasureMode curMode = MobileMeasureMode.playerMode;
  36. void _onViewModeChanged(Object s, MobileMeasureMode mode) {
  37. setState(() {
  38. curMode = mode;
  39. });
  40. }
  41. @override
  42. Widget build(BuildContext context) {
  43. return Column(
  44. mainAxisSize: MainAxisSize.max,
  45. mainAxisAlignment: MainAxisAlignment.start,
  46. children: [
  47. SizedBox(
  48. height: 50,
  49. child: Container(
  50. padding: const EdgeInsets.only(left: 10),
  51. child: Row(
  52. mainAxisAlignment: MainAxisAlignment.start,
  53. children: [
  54. ..._buttons(),
  55. ],
  56. ),
  57. ),
  58. ),
  59. ],
  60. );
  61. }
  62. List<Widget> _buttons() {
  63. switch (curMode) {
  64. case MobileMeasureMode.playerMode:
  65. return [
  66. _fillCustomSpace(10),
  67. _backBtn(),
  68. _fillEmptySpace(),
  69. _saveBtn(),
  70. _editBtn(),
  71. _shareBtn(),
  72. _fillCustomSpace(150)
  73. ];
  74. case MobileMeasureMode.measureMode:
  75. return [
  76. _exitBtn(),
  77. const Text('测量模式'),
  78. _fillEmptySpace(),
  79. _saveBtn(),
  80. _deleteBtn(),
  81. _undoBtn(),
  82. ];
  83. case MobileMeasureMode.annotationMode:
  84. return [
  85. _exitBtn(),
  86. const Text('注释模式'),
  87. _fillEmptySpace(),
  88. _saveBtn(),
  89. _deleteBtn(),
  90. _undoBtn(),
  91. ];
  92. default:
  93. return [Container()];
  94. }
  95. }
  96. Widget _saveBtn() {
  97. return LoadingAnimatedIconButton(
  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. Get.back();
  125. },
  126. );
  127. }
  128. Widget _exitBtn() {
  129. return SingleIconButton(
  130. icon: Icons.exit_to_app,
  131. onPressed: () {
  132. mobileMeasureStateController.currentMode = MobileMeasureMode.playerMode;
  133. },
  134. );
  135. }
  136. Widget _deleteBtn() {
  137. return SingleIconButton(
  138. icon: Icons.delete_outline,
  139. onPressed: () {
  140. application.clearRecords();
  141. },
  142. );
  143. }
  144. Widget _undoBtn() {
  145. return SingleIconButton(
  146. icon: Icons.redo,
  147. onPressed: () {
  148. application.undoRecord();
  149. },
  150. );
  151. }
  152. Widget _fillEmptySpace() {
  153. return Expanded(
  154. child: SizedBox(
  155. height: 1,
  156. width: MediaQuery.of(context).size.width,
  157. ),
  158. );
  159. }
  160. Widget _fillCustomSpace(double width) {
  161. return SizedBox(
  162. width: width,
  163. );
  164. }
  165. }