handlePointerEvent method
Dispatch an event to the targets found by a hit test on its position.
This method sends the given event to dispatchEvent based on event types:
- PointerDownEvents and PointerSignalEvents are dispatched to the result of a new hitTest.
- PointerUpEvents and PointerMoveEvents are dispatched to the result of hit test of the preceding PointerDownEvents.
- PointerHoverEvents, PointerAddedEvents, and PointerRemovedEvents are dispatched without a hit test result.
Implementation
@override
void handlePointerEvent(PointerEvent event) {
if (locked) {
return;
}
final device = this.device;
if (device == null) {
super.handlePointerEvent(event);
return;
}
final flutterView = platformDispatcher.implicitView!;
final realPixelRatio = flutterView.parent.devicePixelRatio;
final virtualPixelRatio = flutterView.devicePixelRatio;
final scale = virtualPixelRatio / realPixelRatio;
event = event.copyWith(
position: event.position * scale,
delta: event.delta * scale,
);
final screenArea = VirtualTransforms.screenDestinationRect(
device,
orientation,
);
if (!screenArea.contains(event.position)) {
return;
}
final relativePosition = Offset(
(event.position.dx - screenArea.left) / screenArea.width,
(event.position.dy - screenArea.top) / screenArea.height,
);
final relativeDelta = Offset(
event.delta.dx / screenArea.width,
event.delta.dy / screenArea.height,
);
final screenSize = device.screenSizeOn(orientation);
final transformedEvent = event.copyWith(
position: Offset(
relativePosition.dx * screenSize.width,
relativePosition.dy * screenSize.height,
),
delta: Offset(
relativeDelta.dx * screenSize.width,
relativeDelta.dy * screenSize.height,
),
);
super.handlePointerEvent(transformedEvent);
}