scrollOffsetOf method

  1. @override
double scrollOffsetOf(
  1. RenderSliver child,
  2. double scrollOffsetWithinChild
)
override

Returns the scroll offset within the viewport for the given scrollOffsetWithinChild within the given child.

The returned value is an estimate that assumes the slivers within the viewport do not change the layout extent in response to changes in their scroll offset.

Implementation

@override
double scrollOffsetOf(RenderSliver child, double scrollOffsetWithinChild) {
  assert(
    child.parent == this,
    'The "child" argument must be a child of this RenderViewport.',
  );
  final growthDirection = child.constraints.growthDirection;
  switch (growthDirection) {
    case GrowthDirection.forward:
      var scrollOffsetToChild = 0.0;
      var current = center;
      while (current != child) {
        scrollOffsetToChild += current!.geometry!.scrollExtent;
        current = childAfter(current);
      }
      return scrollOffsetToChild + scrollOffsetWithinChild;
    case GrowthDirection.reverse:
      var scrollOffsetToChild = 0.0;
      var current = childBefore(center!);
      while (current != child) {
        scrollOffsetToChild -= current!.geometry!.scrollExtent;
        current = childBefore(current);
      }
      return scrollOffsetToChild - scrollOffsetWithinChild;
  }
}