anchor.diff:    /// 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);
   }
   
  
positive.code:       child.parentData = new SliverGridParentData();
    }
  
    SliverGridDelegate get gridDelegate => _gridDelegate;
    SliverGridDelegate _gridDelegate;
  
    set gridDelegate(SliverGridDelegate value) {
      assert(value != null);
      if (_gridDelegate == value)
  
negative.code:   }
  }
  
  /// Parent data structure used by [RenderSliverGrid].
  class SliverGridParentData extends SliverMultiBoxAdaptorParentData {
    /// The offset of the child in the non-scrolling axis.
    ///
    /// If the scroll axis is vertical, this offset is from the left-most edge of
    /// the parent to the left-most edge of the child. If the scroll axis is
    /// horizontal, this offset is from the top-most edge of the parent to the
    /// top-most edge of the child.
    double crossAxisOffset;
  
    @override
    String toString() => 'crossAxisOffset=$crossAxisOffset; ${super.toString()}';
  }
  
  /// A sliver that contains multiple box children that whose size and position
  /// are determined by a delegate.
  ///
  /// [RenderSliverGrid] places its children in arbitrary positions determined by
  /// [gridDelegate]. Each child is forced to have the size specified by the
  /// [gridDelegate].
  ///
  /// See also:
  ///
  ///  * [RenderSliverList], which places its children in a linear
  ///    array.
  ///  * [RenderSliverFixedExtentList], which places its children in a linear
  ///    array with a fixed extent in the main axis.
  class RenderSliverGrid extends RenderSliverMultiBoxAdaptor {
    /// Creates a sliver that contains multiple box children that whose size and
    /// position are determined by a delegate.
    ///
    /// The [childManager] and [gridDelegate] arguments must not be null.
    RenderSliverGrid({
      @required RenderSliverBoxChildManager childManager,
      @required SliverGridDelegate gridDelegate,
    }) : _gridDelegate = gridDelegate,
         super(childManager: childManager) {
      assert(gridDelegate != null);
    }
  
    @override
  