paint method
See RenderObject.paint.
Implementation
@override
void paint(PaintingContext context, Offset offset) {
if (onVisibilityChanged == null) {
// No need to create a [VisibilityDetectorLayer]. However, in case one
// already exists, remove all cached data for it so that we won't fire
// visibility callbacks when the layer is removed.
VisibilityDetectorLayer.forget(key);
super.paint(context, offset);
return;
}
Size widgetSize;
Offset widgetOffset;
switch (applyGrowthDirectionToAxisDirection(
constraints.axisDirection,
constraints.growthDirection,
)) {
case AxisDirection.down:
widgetOffset = Offset(0, -constraints.scrollOffset);
widgetSize = Size(constraints.crossAxisExtent, geometry!.scrollExtent);
break;
case AxisDirection.up:
final startOffset = geometry!.paintExtent +
constraints.scrollOffset -
geometry!.scrollExtent;
widgetOffset = Offset(0, min(startOffset, 0));
widgetSize = Size(constraints.crossAxisExtent, geometry!.scrollExtent);
break;
case AxisDirection.right:
widgetOffset = Offset(-constraints.scrollOffset, 0);
widgetSize = Size(geometry!.scrollExtent, constraints.crossAxisExtent);
break;
case AxisDirection.left:
final startOffset = geometry!.paintExtent +
constraints.scrollOffset -
geometry!.scrollExtent;
widgetOffset = Offset(min(startOffset, 0), 0);
widgetSize = Size(geometry!.scrollExtent, constraints.crossAxisExtent);
break;
}
final layer = VisibilityDetectorLayer(
key: key,
widgetOffset: widgetOffset,
widgetSize: widgetSize,
paintOffset: offset,
onVisibilityChanged: onVisibilityChanged!);
context.pushLayer(layer, super.paint, offset);
}