getNearbyPoint method
外部拖拽获取触摸点最近的点位
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;
}
}