anchor.diff:         rowOffsets = _generateRegularOffsets(rowCount, tileHeight) {
       assert(_debugIsMonotonic(columnOffsets));
       assert(_debugIsMonotonic(rowOffsets));
  +    assert(columnSpacing != null && columnSpacing >= 0.0);
  +    assert(rowSpacing != null && rowSpacing >= 0.0);
       assert(padding != null && padding.isNonNegative);
     }
   
  
positive.code:       assert(placement.column + placement.columnSpan < _specification.columnOffsets.length);
        assert(placement.row + placement.rowSpan < _specification.rowOffsets.length);
  
        double tileLeft = _specification.columnOffsets[placement.column] + gridLeftPadding;
        double tileRight = _specification.columnOffsets[placement.column + placement.columnSpan] + gridLeftPadding;
        double tileTop = _specification.rowOffsets[placement.row] + gridTopPadding;
        double tileBottom = _specification.rowOffsets[placement.row + placement.rowSpan] + gridTopPadding;
  
        double childWidth = math.max(0.0, tileRight - tileLeft - _specification.columnSpacing);
        double childHeight = math.max(0.0, tileBottom - tileTop - _specification.rowSpacing);
  
negative.code:   }
  
    /// Creates a grid specification containing a certain number of equally sized tiles.
    /// The tileWidth is the sum of the width of the child it will contain and
    /// columnSpacing (even if columnCount is 1). Similarly tileHeight is child's height
    /// plus rowSpacing. If the tiles are to completely fill the grid, then their size
    /// should be based on the grid's padded interior.
    GridSpecification.fromRegularTiles({
      double tileWidth,
      double tileHeight,
  