hitTest method

  1. @override
bool hitTest (BoxHitTestResult result, { Offset position })
override

Determines the set of render objects located at the given position.

Returns true, and adds any render objects that contain the point to the given hit test result, if this render object or one of its descendants absorbs the hit (preventing objects below this one from being hit). Returns false if the hit can continue to other objects below this one.

The caller is responsible for transforming position from global coordinates to its location relative to the origin of this RenderBox. This RenderBox is responsible for checking whether the given position is within its bounds.

If transforming is necessary, BoxHitTestResult.addWithPaintTransform, BoxHitTestResult.addWithPaintOffset, or BoxHitTestResult.addWithRawTransform need to be invoked by the caller to record the required transform operations in the HitTestResult. These methods will also help with applying the transform to position.

Hit testing requires layout to be up-to-date but does not require painting to be up-to-date. That means a render object can rely upon performLayout having been called in hitTest but cannot rely upon paint having been called. For example, a render object might be a child of a RenderOpacity object, which calls hitTest on its children when its opacity is zero even through it does not paint its children.

Implementation

@override
bool hitTest(BoxHitTestResult result, { Offset position }) {
  bool hitTarget = false;
  if (size.contains(position)) {
    hitTarget = hitTestChildren(result, position: position) || hitTestSelf(position);
    if (hitTarget || behavior == HitTestBehavior.translucent)
      result.add(BoxHitTestEntry(this, position));
  }
  return hitTarget;
}