arrow_gesture_panel.dart 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import 'package:fis_measure/interfaces/process/workspace/application.dart';
  2. import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
  3. import 'package:fis_measure/view/gesture/mouse_gesture.dart';
  4. import 'package:flutter/material.dart';
  5. import 'package:get/get.dart';
  6. import '../positioned_cursor.dart';
  7. /// 箭头注释手势面板
  8. class AnnotationArrowGesturePanel extends StatefulWidget {
  9. const AnnotationArrowGesturePanel({Key? key}) : super(key: key);
  10. @override
  11. State<AnnotationArrowGesturePanel> createState() => _PanelState();
  12. }
  13. class _PanelState extends State<AnnotationArrowGesturePanel> {
  14. late final application = Get.find<IApplication>();
  15. CursorDisplayType displayType = CursorDisplayType.none;
  16. final mouseState = Get.find<IMouseState>();
  17. @override
  18. Widget build(BuildContext context) {
  19. return GestureDetector(
  20. onTapDown: (details) {
  21. application.createPointInfo(
  22. details.localPosition,
  23. PointInfoType.mouseDown,
  24. );
  25. },
  26. onPanUpdate: (details) {
  27. mouseState.mousePosition = details.localPosition;
  28. },
  29. child: MouseRegion(
  30. onEnter: (e) {
  31. setState(() {
  32. displayType = CursorDisplayType.normal;
  33. });
  34. },
  35. onExit: (e) {
  36. setState(() {
  37. displayType = CursorDisplayType.none;
  38. });
  39. },
  40. cursor: SystemMouseCursors.none,
  41. child: Stack(
  42. children: [
  43. _buildCursor(),
  44. ],
  45. ),
  46. onHover: (event) {
  47. mouseState.mousePosition = event.localPosition;
  48. application.createPointInfo(
  49. event.localPosition,
  50. PointInfoType.mouseMove,
  51. );
  52. },
  53. ),
  54. );
  55. }
  56. Widget _buildCursor() {
  57. switch (displayType) {
  58. case CursorDisplayType.none:
  59. return Container();
  60. case CursorDisplayType.normal:
  61. return const PositionedCursor();
  62. default:
  63. return const PositionedCursor();
  64. }
  65. }
  66. }