onSnapEvent method
Listen for snap events on a specific follower.
Events include:
- SnapDragStarted - User starts dragging the follower
- SnapDragging - During drag (for live distance updates)
- SnapDragEnded - User releases the drag
- SnapDetached - Snap binding was removed
- SnapSnapped - Follower was snapped to target
- SnapProximityEntered - Dragged palette enters snap zone
- SnapProximityExited - Dragged palette exits snap zone
- SnapProximityUpdated - Distance changes during drag in snap zone
Example: Implement magnetic snap behavior:
snapClient.onSnapEvent(followerId, (event) {
if (event is SnapDragEnded) {
if (event.snapDistance < 50) {
snapClient.reSnap(followerId); // Close enough, snap back
} else {
snapClient.detach(followerId); // Too far, fully detach
}
}
});
Implementation
void onSnapEvent(String followerId, void Function(SnapEvent) callback) {
onWindowEvent(followerId, 'followerDragStarted', (e) {
callback(SnapDragStarted.fromEventData(
followerId,
Map<String, dynamic>.from(e.data),
));
});
onWindowEvent(followerId, 'followerDragging', (e) {
callback(SnapDragging.fromEventData(
followerId,
Map<String, dynamic>.from(e.data),
));
});
onWindowEvent(followerId, 'followerDragEnded', (e) {
callback(SnapDragEnded.fromEventData(
followerId,
Map<String, dynamic>.from(e.data),
));
});
onWindowEvent(followerId, 'detached', (e) {
callback(SnapDetached.fromEventData(
followerId,
Map<String, dynamic>.from(e.data),
));
});
onWindowEvent(followerId, 'snapped', (e) {
callback(SnapSnapped.fromEventData(
followerId,
Map<String, dynamic>.from(e.data),
));
});
onWindowEvent(followerId, 'proximityEntered', (e) {
callback(SnapProximityEntered.fromEventData(
followerId,
Map<String, dynamic>.from(e.data),
));
});
onWindowEvent(followerId, 'proximityExited', (e) {
callback(SnapProximityExited.fromEventData(
followerId,
Map<String, dynamic>.from(e.data),
));
});
onWindowEvent(followerId, 'proximityUpdated', (e) {
callback(SnapProximityUpdated.fromEventData(
followerId,
Map<String, dynamic>.from(e.data),
));
});
}