anchor.diff:  
   import 'custom_pointer_scroll_view.dart';
   
  +class _ExtentDelegateChangeNotifier extends ChangeNotifier {
  +  void onChanged() {
  +    notifyListeners();
  +  }
  +}
  +
   /// Base class for delegate providing extent information for items in a list.
   abstract class ExtentDelegate {
     /// Optional callback to execute after the layout of the extents is modified.
  -  VoidCallback onLayoutDirty;
  +
  +  Listenable get layoutDirty => _layoutDirty;
  +  final _ExtentDelegateChangeNotifier _layoutDirty =
  +      _ExtentDelegateChangeNotifier();
   
     int get length;
   
  
positive.code:     @required RenderSliverBoxChildManager childManager,
      @required ExtentDelegate extentDelegate,
    }) : super(childManager: childManager) {
      this.extentDelegate = extentDelegate;
    }
  
    set extentDelegate(ExtentDelegate delegate) {
      // We need to listen for when the delegate changes its layout.
      delegate.onLayoutDirty = markNeedsLayout;
      _extentDelegate = delegate;
    }
  
    ExtentDelegate _extentDelegate;
  
    /// Called to estimate the total scrollable extents of this object.
    ///
  
negative.code:         ? _extentDelegate
              .maxChildIndexForScrollOffset(targetEndScrollOffsetForPaint)
          : null;
      assert(paintExtent <= estimatedMaxScrollOffset);
      geometry = SliverGeometry(
        scrollExtent: _extentDelegate.layoutOffset(_extentDelegate.length),
        paintExtent: paintExtent,
  