onScaleUpdate method
Implementation
void onScaleUpdate(ScaleUpdateDetails details) {
// 如果有选中的文字,则执行拖动逻辑
if (_textLayerManager.hasSelection && _dragTextStartPoint != null && _initialLayerOffset != null) {
final dragDelta = details.localFocalPoint - _dragTextStartPoint!;
_textLayerManager.updateSelectedLayerPosition(_initialLayerOffset! + dragDelta);
notifyListeners();
return;
}
// 如果没有文字 执行裁剪框逻辑
if (isCroppingActive && _activeDragHandle != null) {
_onCropDragUpdate(details.localFocalPoint);
} else if (!isCroppingActive) {
// 判断是否为缩放手势:如果 scale 明显偏离 1.0(阈值 0.05),则认为是缩放手势
// 这样可以区分单指滑动(scale 接近 1.0)和双指缩放(scale 明显变化)
final scaleDeviation = (details.scale - 1.0).abs();
if (scaleDeviation > 0.05) {
_isScalingGesture = true;
}
// 只有在确认是缩放手势时才执行缩放
// 如果当前 scale 明显偏离 1.0,则执行缩放;否则忽略(避免单指滑动时误触发)
if (_isScalingGesture && scaleDeviation > 0.02) {
_scale = (_previousScale * details.scale).clamp(0.2, 5.0);
}
}
notifyListeners();
}