anchor.diff:          leadingScrollOffset: leadingScrollOffset,
           trailingScrollOffset: endScrollOffset,
         );
  -      // log('RRL firstIndex=${indexOf(firstChild!)}, lastIndex=${indexOf(lastChild!)}');
         assert(
           estimatedMaxScrollOffset >= endScrollOffset - leadingScrollOffset,
         );
  
positive.code: 
      // At this point everything should be good to go, we just have to clean up
      // the garbage and report the geometry.
      // print('collectGarbage 3');
      collectGarbage(leadingGarbage, trailingGarbage);
  
      assert(debugAssertChildListIsNonEmptyAndContiguous());
  
negative.code:       assert(child != null);
        // We always put the next child at the smallest index with the minimum
        // value.
        final crossAxisIndex = scrollOffsets.findSmallestIndexWithMinimumValue();
        final childParentData = getParentData(child!);
        childParentData.layoutOffset = scrollOffsets[crossAxisIndex];
        childParentData.crossAxisIndex = crossAxisIndex;
        childParentData.crossAxisOffset = crossAxisIndex * stride;
        scrollOffsets[crossAxisIndex] =
            childScrollOffset(child!)! + paintExtentOf(child!) + mainAxisSpacing;
  
        assert(childParentData.index == index);
        return true;
      }
  
      // Find the first child that ends after the scroll offset.
      while (scrollOffsets
  