getNearbyPoint method

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

Implementation

TouchBackModel getNearbyPoint(Offset localPosition,
    {bool defaultCancelTouchChoose = true}) {
  if (value != null && value! < 1.0) {
    return TouchBackModel(startOffset: null, size: Size.zero);
  }
  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;
  if (_touchCellModels.length <= 1) {
    _touchModel = _touchCellModels.isEmpty ? null : _touchCellModels.first;
  } else {
    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.last;
        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,
        index: _touchModel.index);
  }
}