anchor.diff:          visibleIndices.add(index);
         }
   
  -      if(firstIndexNextBlock == null &&
  -         geometry.trailingScrollOffset >= trailingPageOffset){
  -        firstIndexNextBlock = index;
  -        debugPrint('firstIndexNextBlock=$firstIndexNextBlock');
  -        int nextPageIndex = pageIndex + 1;
  -        var nextViewportOffset = new _ViewportOffsets(
  -            trailingPageOffset, firstIndexNextBlock, mainAxisOffsets);
  -        if(_viewportOffsets.length <= nextPageIndex) {
  -          debugPrint('Add next viewport offset: $nextPageIndex - $nextViewportOffset');
  -          _viewportOffsets.add(nextViewportOffset);
  -        }else{
  -          debugPrint('Set next viewport offset: $nextPageIndex - $nextViewportOffset');
  -          _viewportOffsets[nextPageIndex] = nextViewportOffset;
  -        }
  +      if(geometry.trailingScrollOffset >= viewportOffset.trailingScrollOffset){
  +        int nextPageIndex = viewportOffset.pageIndex + 1;
  +        var nextViewportOffset = new _ViewportOffsets(mainAxisOffsets, (nextPageIndex + 1) * pageSize, nextPageIndex, index);
  +          debugPrint('Set next viewport offset: $nextViewportOffset');
  +          viewportOffsets[nextPageIndex] = nextViewportOffset;
  +          viewportOffset = nextViewportOffset;
         }
   
         final double endOffset =
  
positive.code: 
  class _ViewportOffsets {
    _ViewportOffsets(
        this.scrollOffset,
      this.firstIndex,
      List<double> mainAxisOffsets,
    ) : this.mainAxisOffsets = new List.from(mainAxisOffsets);
  
    final double scrollOffset;
  
    //final double trailingScrollOffset;
  
    final int firstIndex;
  
    List<double> mainAxisOffsets;
  
    @override
    String toString() => '[$scrollOffset-$firstIndex] [$mainAxisOffsets]';
  }
  
  /// Creates staggered grid layouts.
  
negative.code:     _gridDelegate = value;
    }
  
    HashMap<double, SplayTreeMap<int, _ViewportOffsets>> _pageSizeToViewportOffsets;
  
    @override
    void performLayout() {
  