getNearbyPoint method

TouchBackModel getNearbyPoint(
  1. Offset localPosition, {
  2. bool defaultCancelTouchChoose = true,
})

Implementation

TouchBackModel getNearbyPoint(Offset localPosition,
    {bool defaultCancelTouchChoose = true}) {
  if (localPosition.dx <= _startX ||
      localPosition.dx >= _endX ||
      localPosition.dy >= _startY ||
      localPosition.dy <= _endY) {
    //不在坐标轴内部的点击
    if (defaultCancelTouchChoose) {
      return TouchBackModel(
        startOffset: null,
        size: Size.zero,
      );
    } else {
      return TouchBackModel(
          needRefresh: false, startOffset: null, size: Size.zero);
    }
  }
  _touchCellModels.sort((a, b) => a.centerX.compareTo(b.centerX));
  BarTouchCellModel? touchModel;
  for (var i = 0; i < _touchCellModels.length - 1; i++) {
    var currentX = _touchCellModels[i].centerX;
    var nextX = _touchCellModels[i + 1].centerX;
    if (i == 0 && localPosition.dx < currentX) {
      touchModel = _touchCellModels.first;
      break;
    }
    if (i == _touchCellModels.length - 2 && localPosition.dx >= nextX) {
      touchModel = _touchCellModels[i + 1];
      break;
    }
    if (localPosition.dx >= currentX && localPosition.dx < nextX) {
      var speaceWidth = nextX - currentX;
      if (localPosition.dx <= currentX + speaceWidth / 2) {
        touchModel = _touchCellModels[i];
      } else {
        touchModel = _touchCellModels[i + 1];
      }
      break;
    }
  }
  if (touchModel == null) {
    return TouchBackModel(
      startOffset: null,
      size: Size.zero,
    );
  } else {
    return TouchBackModel(
        startOffset: touchModel.begainPoint,
        size: touchModel.size,
        backParam: touchModel.param);
  }
}