handleEvent method
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;
}
}