handleMouseEvent method
Handles a mouse event at local coordinates and bounding area.
Implementation
@override
void handleMouseEvent(MouseEvent event, int localX, int localY, Rect area) {
final listView = widget as ListView;
if (event.button == MouseButton.wheelUp) {
scrollOffset = max(0, scrollOffset - 1);
if (selectedIndex >= scrollOffset + size.height.toInt()) {
selectedIndex = scrollOffset + size.height.toInt() - 1;
}
rebuild();
} else if (event.button == MouseButton.wheelDown) {
scrollOffset = min(
max(0, listView.children.length - size.height.toInt()),
scrollOffset + 1,
);
if (selectedIndex < scrollOffset) {
selectedIndex = scrollOffset;
}
rebuild();
} else if (event.type == MouseEventType.press &&
event.button == MouseButton.left) {
final clickedIndex = scrollOffset + localY;
if (clickedIndex >= 0 && clickedIndex < listView.children.length) {
selectedIndex = clickedIndex;
listView.onSelect?.call(clickedIndex);
rebuild();
}
} else if (event.type == MouseEventType.move ||
event.type == MouseEventType.drag) {
final hoveredIdx = scrollOffset + localY;
if (localX >= 0 &&
localX < area.width &&
localY >= 0 &&
localY < area.height &&
hoveredIdx >= 0 &&
hoveredIdx < listView.children.length) {
if (hoveredIndex != hoveredIdx) {
hoveredIndex = hoveredIdx;
listView.onHover?.call(hoveredIdx);
rebuild();
}
} else {
if (hoveredIndex != null) {
hoveredIndex = null;
listView.onHover?.call(null);
rebuild();
}
}
}
}