getMinChildIndexForScrollOffset method

int getMinChildIndexForScrollOffset(
  1. Iterable<_Interval> list,
  2. double scrollOffset,
  3. double itemExtent
)

Implementation

int getMinChildIndexForScrollOffset(
    Iterable<_Interval> list, double scrollOffset, double itemExtent) {
  if (scrollOffset <= 0) return 0;
  var toOffset = 0.0, adjust = 0.0;
  for (final interval in list.expandedIntervals) {
    if (interval is _SpaceInterval) {
      toOffset += interval.currentSize;
      if (scrollOffset < toOffset) {
        return interval.actualBuildOffset;
      }
      adjust += itemExtent - interval.currentSize;
    } else {
      toOffset += interval.buildCount * itemExtent;
      if (scrollOffset < toOffset) break;
    }
  }
  scrollOffset += adjust;
  if (itemExtent > 0.0) {
    final actual = scrollOffset / itemExtent;
    final round = actual.round();
    if ((actual * itemExtent - round * itemExtent).abs() <
        precisionErrorTolerance) {
      return round;
    }
    return actual.floor();
  }
  return 0;
}