handleEvent method

  1. @override
void handleEvent(
  1. PointerEvent event,
  2. covariant HitTestEntry<HitTestTarget> entry
)
override

Processes pointer events (down, move, up, cancel) to detect link and hashtag taps.

This method:

  • Records the initial pointer position on pointer down
  • Tracks pointer movement and cancels taps if movement exceeds _kTouchSlop
  • Detects links and hashtags under the pointer on pointer up
  • Fires onLinkTap or onHashtagTap callbacks as appropriate

Implementation

@override
void handleEvent(PointerEvent event, HitTestEntry entry) {
  if (event is PointerDownEvent) {
    _pointerDownPosition = event.localPosition;
    _tapCancelled = false;
    return;
  }

  if (event is PointerMoveEvent) {
    if (_pointerDownPosition != null) {
      final distance = (event.localPosition - _pointerDownPosition!).distance;

      if (distance > _kTouchSlop) {
        _tapCancelled = true;
      }
    }
    return;
  }

  if (event is PointerCancelEvent) {
    _tapCancelled = true;
    _pointerDownPosition = null;
    return;
  }

  if (event is PointerUpEvent) {
    if (_tapCancelled) {
      _pointerDownPosition = null;
      return;
    }

    final textPosition = _textPainter.getPositionForOffset(event.localPosition);

    final offset = textPosition.offset;

    for (final link in _links) {
      if (link.contains(offset)) {
        onLinkTap?.call(link.text);
        break;
      }
    }

    for (final tag in _tags) {
      if (tag.contains(offset)) {
        onHashtagTap?.call(tag.text);
        break;
      }
    }

    _pointerDownPosition = null;
  }
}