import 'package:fis_measure/interfaces/process/workspace/application.dart'; import 'package:fis_measure/interfaces/process/workspace/point_info.dart'; import 'package:fis_measure/view/gesture/mouse_gesture.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../positioned_cursor.dart'; /// 箭头注释手势面板 class AnnotationArrowGesturePanel extends StatefulWidget { const AnnotationArrowGesturePanel({Key? key}) : super(key: key); @override State createState() => _PanelState(); } class _PanelState extends State { late final application = Get.find(); CursorDisplayType displayType = CursorDisplayType.none; final mouseState = Get.find(); @override Widget build(BuildContext context) { return GestureDetector( onTapDown: (details) { application.createPointInfo( details.localPosition, PointInfoType.mouseDown, ); }, onPanUpdate: (details) { mouseState.mousePosition = details.localPosition; }, child: MouseRegion( onEnter: (e) { setState(() { displayType = CursorDisplayType.normal; }); }, onExit: (e) { setState(() { displayType = CursorDisplayType.none; }); }, cursor: SystemMouseCursors.none, child: Stack( children: [ _buildCursor(), ], ), onHover: (event) { mouseState.mousePosition = event.localPosition; application.createPointInfo( event.localPosition, PointInfoType.mouseMove, ); }, ), ); } Widget _buildCursor() { switch (displayType) { case CursorDisplayType.none: return Container(); case CursorDisplayType.normal: return const PositionedCursor(); default: return const PositionedCursor(); } } }