snapToSteps function

SnapResult snapToSteps(
  1. double value,
  2. List<double> steps
)

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