paint method

  1. @override
void paint(
  1. PaintingContext context,
  2. Offset offset
)
override

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);
}