anchor.diff:        child.parentData = new SliverGridParentData();
     }
   
  +  /// The delegate that controls the size and position of the children.
     SliverGridDelegate get gridDelegate => _gridDelegate;
     SliverGridDelegate _gridDelegate;
  -
     set gridDelegate(SliverGridDelegate value) {
       assert(value != null);
       if (_gridDelegate == value)
  
positive.code:   }
  }
  
  class SliverGridParentData extends SliverMultiBoxAdaptorParentData {
    double crossAxisOffset;
  
    @override
    String toString() => 'crossAxisOffset=$crossAxisOffset; ${super.toString()}';
  }
  
  class RenderSliverGrid extends RenderSliverMultiBoxAdaptor {
    RenderSliverGrid({
      @required RenderSliverBoxChildManager childManager,
      @required SliverGridDelegate gridDelegate,
    }) : _gridDelegate = gridDelegate,
         super(childManager: childManager) {
      gridDelegate != null;
    }
  
    @override
  
negative.code:   /// Returns information about the size and position of the tiles in the grid.
    SliverGridLayout getLayout(SliverConstraints constraints);
  
    /// Override this method to return true when the children need to be
    /// laid out.
    ///
    /// This should compare the fields of the current delegate and the given
    /// `oldDelegate` and return true if the fields are such that the layout would
    /// be different.
    bool shouldRelayout(covariant SliverGridDelegate oldDelegate);
  }
  
  