handleMouseEvent method
Handles mouse interactions.
Implementation
@override
void handleMouseEvent(MouseEvent event, int localX, int localY) {
final resolvedWidth = widget.width ?? _lastWidth;
final resolvedHeight = widget.height ?? _lastHeight;
if (resolvedWidth <= 0 || resolvedHeight <= 0) return;
final fallback = resolvedWidth < 2 || resolvedHeight < 2;
final bodyW = fallback ? resolvedWidth : resolvedWidth - 1;
final bodyH = fallback ? resolvedHeight : resolvedHeight - 1;
final inBounds =
localX >= 0 && localX < bodyW && localY >= 0 && localY < bodyH;
if (event.type == MouseEventType.press) {
if (inBounds) {
Focus.of(context)?.requestFocus();
setState(() {
_isPressed = true;
_isHovered = false;
final clickPoint = Point(localX, localY);
triggerEffect(_ripple, clickPoint);
});
}
} else if (event.type == MouseEventType.release) {
if (_isPressed) {
setState(() {
_isPressed = false;
_ripple.reset();
if (inBounds) {
_isHovered = true;
widget.onPressed();
} else {
_isHovered = false;
}
});
}
} else if (event.type == MouseEventType.move ||
event.type == MouseEventType.drag) {
final oldHovered = _isHovered;
_isHovered = inBounds && !_isPressed;
if (_isHovered != oldHovered) {
setState(() {});
}
}
}