import 'package:fis_measure/interfaces/process/standard_line/calibration.dart'; import 'package:fis_measure/interfaces/process/workspace/point_info.dart'; import 'package:fis_measure/values/colors.dart'; import 'package:fis_measure/view/cursor.dart'; import 'package:flutter/material.dart'; /// 参考校准线手势画布 class StandardLineCalibrationGesture extends StatefulWidget { const StandardLineCalibrationGesture(this.controller, {Key? key}) : super(key: key); final IStandardLineCalibrationController controller; @override State createState() => _GestureState(); } class _GestureState extends State { // ignore: constant_identifier_names static const C_CURSOR_SIZE = 16.0; Offset position = Offset.zero; @override Widget build(BuildContext context) { final controller = widget.controller; return MouseRegion( cursor: SystemMouseCursors.none, onHover: (event) { setState(() { _updatePosition(event.localPosition); controller.executeGesturePoint( event.localPosition, PointInfoType.mouseMove, ); }); }, child: GestureDetector( onTapDown: (details) { controller.executeGesturePoint( details.localPosition, PointInfoType.mouseDown, ); }, onTapUp: (details) { controller.executeGesturePoint( details.localPosition, PointInfoType.mouseUp, ); }, child: Stack( children: [ Positioned( // top: position.dy - 16, // left: position.dx - 16, top: position.dy, left: position.dx, child: const MeasureCursor( type: MeasureCursorType.cursor01, size: C_CURSOR_SIZE, color: MeasureColors.Primary, ), ), ], ), ), ); } void _updatePosition(Offset offset) { const side = C_CURSOR_SIZE / 2; double dx = offset.dx - side; double dy = offset.dy - side; if (dx < 0) dx = 0; if (dy < 0) dy = 0; position = Offset(dx, dy); } }