import 'package:fis_i18n/i18n.dart'; import 'package:fis_measure/interfaces/process/workspace/application.dart'; import 'package:fis_measure/interfaces/process/workspace/mobile_measure_view_state_controller.dart'; import 'package:fis_measure/process/workspace/measure_data_controller.dart'; import 'package:fis_measure/process/workspace/measure_handler.dart'; import 'package:fis_measure/utils/prompt_box.dart'; import 'package:fis_measure/view/button_group/widget/qr_code_with_logo.dart'; import 'package:fis_measure/view/mobile_view/controller/mobile_measure_view_state_controller.dart'; import 'package:fis_measure/view/mobile_view/widgets/animated_icon_btn.dart'; import 'package:fis_measure/view/mobile_view/widgets/icon_btn.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; class MobileTopMenu extends StatefulWidget { final VoidCallback capturePng; const MobileTopMenu({ Key? key, required this.capturePng, }) : super(key: key); @override State createState() => _MobileTopMenuState(); } class _MobileTopMenuState extends State { final application = Get.find(); final measureHandler = Get.find(); final measureData = Get.find(); final mobileMeasureStateController = Get.find(); @override void initState() { mobileMeasureStateController.onModeChanged.addListener(_onViewModeChanged); super.initState(); } @override void dispose() { mobileMeasureStateController.onModeChanged .removeListener(_onViewModeChanged); super.dispose(); } MobileMeasureMode curMode = MobileMeasureMode.playerMode; void _onViewModeChanged(Object s, MobileMeasureMode mode) { setState(() { curMode = mode; }); } @override Widget build(BuildContext context) { return Column( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.start, children: [ SizedBox( height: 50, child: Container( padding: const EdgeInsets.only(left: 10), child: Row( mainAxisAlignment: MainAxisAlignment.start, children: [ ..._buttons(), ], ), ), ), ], ); } List _buttons() { switch (curMode) { case MobileMeasureMode.playerMode: return [ _fillCustomSpace(10), _backBtn(), _fillEmptySpace(), _saveBtn(), // _editBtn(), _shareBtn(), _fillCustomSpace(150) ]; case MobileMeasureMode.measureMode: return [ _exitBtn(), Text(i18nBook.measure.measurementMode.t), _fillEmptySpace(), _saveBtn(), _deleteBtn(), _undoBtn(), ]; case MobileMeasureMode.annotationMode: return [ _exitBtn(), Text(i18nBook.measure.annotationMode.t), _fillEmptySpace(), _saveBtn(), _deleteBtn(), _undoBtn(), ]; default: return [Container()]; } } Widget _saveBtn() { return LoadingAnimatedIconButton( icon: Icons.save, onPressed: () { widget.capturePng(); }, ); } Widget _shareBtn() { return LoadingAnimatedIconButton( animationDuration: 600, icon: Icons.share, onPressed: () async { var itemCurrentImage = await measureData.shareImage.call( measureData.itemCurrentImage, ); Get.dialog(_buildShareQr(itemCurrentImage)); }, ); } Widget _editBtn() { return SingleIconButton( icon: Icons.edit, onPressed: () { print("call 进入撰写报告"); }, ); } Widget _backBtn() { return SingleIconButton( icon: Icons.arrow_back_ios_new, onPressed: () { Get.back(); }, ); } Widget _exitBtn() { return SingleIconButton( icon: Icons.exit_to_app, onPressed: () { mobileMeasureStateController.currentMode = MobileMeasureMode.playerMode; }, ); } Widget _deleteBtn() { return SingleIconButton( icon: Icons.delete_outline, onPressed: () { application.clearRecords(); ///FIXME:[Gavin] 有时候删除了画布记录,但是没有刷新 }, ); } Widget _undoBtn() { return SingleIconButton( icon: Icons.redo, onPressed: () { application.undoRecord(); }, ); } Widget _fillEmptySpace() { return Expanded( child: SizedBox( height: 1, width: MediaQuery.of(context).size.width, ), ); } Widget _fillCustomSpace(double width) { return SizedBox( width: width, ); } Widget _buildShareQr(String itemCurrentImage) { return SimpleDialog( children: [ SizedBox( width: 260, child: Container( padding: const EdgeInsets.only(top: 10, bottom: 10), child: QRCodeWithLogo( itemCurrentImage, codeStatement: i18nBook.remedical.scanQrCodeToShareImage.t, operationStatement: i18nBook.remedical.copyLink.t, operationSuccessCallback: () => {PromptBox.toast(i18nBook.remedical.copySuccess.t)}, size: 180, ), ), ), ], ); } }