mobile_top_menu.dart 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. import 'package:fis_i18n/i18n.dart';
  2. import 'package:fis_lib_qrcode/qr_flutter.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:get/get.dart';
  5. import 'package:fis_measure/interfaces/process/workspace/application.dart';
  6. import 'package:fis_measure/interfaces/process/workspace/mobile_measure_view_state_controller.dart';
  7. import 'package:fis_measure/process/workspace/measure_data_controller.dart';
  8. import 'package:fis_measure/process/workspace/measure_handler.dart';
  9. import 'package:fis_measure/utils/prompt_box.dart';
  10. import 'package:fis_measure/view/mobile_view/controller/mobile_measure_view_state_controller.dart';
  11. import 'package:fis_measure/view/mobile_view/widgets/animated_icon_btn.dart';
  12. import 'package:fis_measure/view/mobile_view/widgets/icon_btn.dart';
  13. class MobileTopMenu extends StatefulWidget {
  14. final VoidCallback capturePng;
  15. const MobileTopMenu({
  16. Key? key,
  17. required this.capturePng,
  18. }) : super(key: key);
  19. @override
  20. State<StatefulWidget> createState() => _MobileTopMenuState();
  21. }
  22. class _MobileTopMenuState extends State<MobileTopMenu> {
  23. final application = Get.find<IApplication>();
  24. final measureHandler = Get.find<IMeasureHandler>();
  25. final measureData = Get.find<MeasureDataController>();
  26. final mobileMeasureStateController =
  27. Get.find<MobileMeasureViewStateController>();
  28. @override
  29. void initState() {
  30. mobileMeasureStateController.onModeChanged.addListener(_onViewModeChanged);
  31. super.initState();
  32. }
  33. @override
  34. void dispose() {
  35. mobileMeasureStateController.onModeChanged
  36. .removeListener(_onViewModeChanged);
  37. super.dispose();
  38. }
  39. MobileMeasureMode curMode = MobileMeasureMode.playerMode;
  40. void _onViewModeChanged(Object s, MobileMeasureMode mode) {
  41. setState(() {
  42. curMode = mode;
  43. });
  44. }
  45. @override
  46. Widget build(BuildContext context) {
  47. return Column(
  48. mainAxisSize: MainAxisSize.max,
  49. mainAxisAlignment: MainAxisAlignment.start,
  50. children: [
  51. SizedBox(
  52. height: 50,
  53. child: Container(
  54. padding: const EdgeInsets.only(left: 10),
  55. child: Row(
  56. mainAxisAlignment: MainAxisAlignment.start,
  57. children: [
  58. ..._buttons(),
  59. ],
  60. ),
  61. ),
  62. ),
  63. ],
  64. );
  65. }
  66. List<Widget> _buttons() {
  67. switch (curMode) {
  68. case MobileMeasureMode.playerMode:
  69. return [
  70. _fillCustomSpace(10),
  71. _backBtn(),
  72. _fillEmptySpace(),
  73. _saveBtn(),
  74. // _editBtn(),
  75. _shareBtn(),
  76. _fillCustomSpace(150)
  77. ];
  78. case MobileMeasureMode.measureMode:
  79. return [
  80. _exitBtn(),
  81. Text(i18nBook.measure.measurementMode.t),
  82. _fillEmptySpace(),
  83. _saveBtn(),
  84. _deleteBtn(),
  85. _undoBtn(),
  86. ];
  87. case MobileMeasureMode.annotationMode:
  88. return [
  89. _exitBtn(),
  90. Text(i18nBook.measure.annotationMode.t),
  91. _fillEmptySpace(),
  92. _saveBtn(),
  93. _deleteBtn(),
  94. _undoBtn(),
  95. ];
  96. default:
  97. return [Container()];
  98. }
  99. }
  100. Widget _saveBtn() {
  101. return LoadingAnimatedIconButton(
  102. icon: Icons.save,
  103. onPressed: () {
  104. widget.capturePng();
  105. },
  106. );
  107. }
  108. Widget _shareBtn() {
  109. return LoadingAnimatedIconButton(
  110. animationDuration: 600,
  111. icon: Icons.share,
  112. onPressed: () async {
  113. var itemCurrentImage = await measureData.shareImage.call(
  114. measureData.itemCurrentImage,
  115. );
  116. Get.dialog(_buildShareQr(itemCurrentImage));
  117. },
  118. );
  119. }
  120. Widget _editBtn() {
  121. return SingleIconButton(
  122. icon: Icons.edit,
  123. onPressed: () {
  124. //TODO 进入撰写报告
  125. // print("call 进入撰写报告");
  126. },
  127. );
  128. }
  129. Widget _backBtn() {
  130. return SingleIconButton(
  131. icon: Icons.arrow_back_ios_new,
  132. onPressed: () {
  133. Get.back();
  134. },
  135. );
  136. }
  137. Widget _exitBtn() {
  138. return SingleIconButton(
  139. icon: Icons.exit_to_app,
  140. onPressed: () {
  141. mobileMeasureStateController.currentMeasureMode =
  142. MobileMeasureMode.playerMode;
  143. },
  144. );
  145. }
  146. Widget _deleteBtn() {
  147. return SingleIconButton(
  148. icon: Icons.delete_outline,
  149. onPressed: () {
  150. application.clearRecords();
  151. ///FIXME:[Gavin] 有时候删除了画布记录,但是没有刷新
  152. },
  153. );
  154. }
  155. Widget _undoBtn() {
  156. return SingleIconButton(
  157. icon: Icons.redo,
  158. onPressed: () {
  159. application.undoRecord();
  160. },
  161. );
  162. }
  163. Widget _fillEmptySpace() {
  164. return Expanded(
  165. child: SizedBox(
  166. height: 1,
  167. width: MediaQuery.of(context).size.width,
  168. ),
  169. );
  170. }
  171. Widget _fillCustomSpace(double width) {
  172. return SizedBox(
  173. width: width,
  174. );
  175. }
  176. Widget _buildShareQr(String itemCurrentImage) {
  177. return SimpleDialog(
  178. children: [
  179. SizedBox(
  180. width: 260,
  181. child: Container(
  182. padding: const EdgeInsets.only(top: 10, bottom: 10),
  183. child: QRCodeWithLogo(
  184. itemCurrentImage,
  185. codeStatement: i18nBook.remedical.scanQrCodeToShareImage.t,
  186. operationStatement: i18nBook.remedical.copyLink.t,
  187. operationSuccessCallback: () =>
  188. {PromptBox.toast(i18nBook.remedical.copySuccess.t)},
  189. size: 180,
  190. ),
  191. ),
  192. ),
  193. ],
  194. );
  195. }
  196. }