getNearbyPoint method

TouchModel getNearbyPoint(
  1. Offset localPosition, {
  2. bool outsidePointClear = true,
})

外部拖拽获取触摸点最近的点位

Implementation

TouchModel getNearbyPoint(Offset localPosition,
    {bool outsidePointClear = true}) {
  if (localPosition.dx < _startX ||
      localPosition.dx > _endX ||
      localPosition.dy > _startY ||
      localPosition.dy < _endY) {
    //不在坐标轴内部的点击
    if (outsidePointClear) {
      return TouchModel(
        offset: null,
      );
    } else {
      return TouchModel(needRefresh: false, offset: null);
    }
  }

  var poinArr = _points.keys.toList();
  poinArr.sort((num1, num2) => num1.compareTo(num2));

  TouchModel? touchModel;

  ///修复x轴越界
  if (localPosition.dx < poinArr.first) {
    touchModel = _points[poinArr.first];
  } else if (localPosition.dx > poinArr.last) {
    touchModel = _points[poinArr.last];
  } else {
    for (var i = 0; i < poinArr.length - 1; i++) {
      var currentX = poinArr[i];
      var nextX = poinArr[i + 1];
      if (localPosition.dx >= currentX && localPosition.dx < nextX) {
        var speaceWidth = nextX - currentX;
        if (localPosition.dx <= currentX + speaceWidth / 2) {
          touchModel = _points[currentX];
        } else {
          touchModel = _points[nextX];
        }
        break;
      }
    }
  }
  if (touchModel == null) {
    return TouchModel(
      offset: null,
    );
  } else {
    return touchModel;
  }
}