onScaleUpdate method

void onScaleUpdate(
  1. ScaleUpdateDetails details
)

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();
}