snapToSteps function
Snap value to the closest entry of steps. steps must not be empty.
Ties are broken in favour of the smaller value.
Implementation
SnapResult snapToSteps(double value, List<double> steps) {
if (steps.isEmpty) {
throw ArgumentError.value(steps, 'steps', 'must not be empty');
}
double best = steps.first;
double bestDistance = (value - best).abs();
for (var i = 1; i < steps.length; i++) {
final step = steps[i];
final d = (value - step).abs();
if (d < bestDistance || (d == bestDistance && step < best)) {
best = step;
bestDistance = d;
}
}
return SnapResult(best, bestDistance);
}