anchor.diff:          ? _extentDelegate
               .maxChildIndexForScrollOffset(targetEndScrollOffsetForPaint)
           : null;
  +    assert(paintExtent <= estimatedMaxScrollOffset);
       geometry = SliverGeometry(
         scrollExtent: _extentDelegate.layoutOffset(_extentDelegate.length),
         paintExtent: paintExtent,
  
positive.code: 
    @mustCallSuper
    void recompute() {
      if (onLayoutDirty != null) {
        onLayoutDirty();
      }
    }
  }
  
  /// [ExtentDelegate] implementation for the case where sizes for each
  /// item are known but absolute positions are not known.
  class FixedExtentDelegate extends ExtentDelegate {
    FixedExtentDelegate({
      @required this.computeExtent,
      @required this.computeLength,
    }) {
      recompute();
    }
  
  
negative.code:     @required RenderSliverBoxChildManager childManager,
      @required ExtentDelegate extentDelegate,
    }) : super(childManager: childManager) {
      _markNeedsLayout = markNeedsLayout;
      this.extentDelegate = extentDelegate;
    }
  
    set extentDelegate(ExtentDelegate delegate) {
      if (delegate == _extentDelegate) return;
      assert(_markNeedsLayout != null);
  
      // Unregister from the previous delegate if there was one.
      if (_extentDelegate != null) {
        _extentDelegate.layoutDirty.removeListener(_markNeedsLayout);
      }
  
      // We need to listen for when the delegate changes its layout.
      delegate.layoutDirty.addListener(_markNeedsLayout);
      _extentDelegate = delegate;
    }
  
    ExtentDelegate _extentDelegate;
    VoidCallback _markNeedsLayout;
  
    /// Called to estimate the total scrollable extents of this object.
    ///
  