getNearbyPoint method
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);
}
}