playbookVisibleRect function

Rect? playbookVisibleRect(
  1. Element element
)

The part of element that is on screen, in global coordinates, or null when none of it is.

The box is clipped to the screen and to every scrollable it sits in.

Implementation

Rect? playbookVisibleRect(Element element) {
  if (!element.mounted) return null;
  final RenderObject? object = element.renderObject;
  if (object is! RenderBox || !object.attached || !object.hasSize) {
    return null;
  }
  Rect rect;
  try {
    rect = MatrixUtils.transformRect(
      object.getTransformTo(null),
      Offset.zero & object.size,
    );
  } catch (_) {
    return null;
  }

  final FlutterView? view = View.maybeOf(element);
  if (view != null) {
    rect = rect.intersect(
      Offset.zero & (view.physicalSize / view.devicePixelRatio),
    );
  }
  element.visitAncestorElements((Element ancestor) {
    final RenderObject? render = ancestor is RenderObjectElement
        ? ancestor.renderObject
        : null;
    if (render is RenderViewportBase && render.attached && render.hasSize) {
      rect = rect.intersect(
        MatrixUtils.transformRect(
          render.getTransformTo(null),
          Offset.zero & render.size,
        ),
      );
    }
    return true;
  });
  if (rect.width < 1 || rect.height < 1) return null;
  return rect;
}