handleMouseEvent method

  1. @override
void handleMouseEvent(
  1. MouseEvent event,
  2. int localX,
  3. int localY,
  4. Rect area,
)
override

Handles mouse events to update the slider's value on drag or click.

Implementation

@override
void handleMouseEvent(MouseEvent event, int localX, int localY, Rect area) {
  if (event.type == MouseEventType.press) {
    if (widget.axis == SliderAxis.horizontal) {
      if (localY != 0) return;
    } else {
      if (localX != 0) return;
    }
    _isDragging = true;
  } else if (event.type == MouseEventType.drag) {
    if (!_isDragging) return;
  } else if (event.type == MouseEventType.release) {
    _isDragging = false;
    return;
  } else {
    return;
  }

  if (widget.axis == SliderAxis.horizontal) {
    final trackLength = area.width;
    if (trackLength <= 1) return;

    final percent = (localX / (trackLength - 1)).clamp(0.0, 1.0);
    widget.value = widget.min + percent * (widget.max - widget.min);
    widget.onChanged?.call(widget.value);
  } else {
    final trackLength = area.height;
    if (trackLength <= 1) return;

    // For vertical slider, top (y=0) is max, bottom (y=height-1) is min
    final percent = 1.0 - (localY / (trackLength - 1)).clamp(0.0, 1.0);
    widget.value = widget.min + percent * (widget.max - widget.min);
    widget.onChanged?.call(widget.value);
  }
}