applyMouseMoveGesturesDetectors function
Implementation
Widget applyMouseMoveGesturesDetectors(Stage stage, Widget child) {
if (stage is HasHoverablesMixin) {
Future? _future;
PointerHoverEvent? _event;
int _flag = 0;
return MouseRegion(
// TODO: dynamic set cursor
cursor: SystemMouseCursors.none,
onEnter: (event) {
stage.onMouseEnter(PointerEnterInfo.fromDetails(stage, event));
},
onExit: (event) {
if (_future != null && _event != null) {
stage.onMouseMove(PointerHoverInfo.fromDetails(stage, _event!));
}
_future = null;
_event = null;
++_flag;
stage.onMouseLeave(PointerLeaveInfo.fromDetails(stage, event));
},
onHover: (event) {
_event = event;
if (_future != null) return;
final flag = _flag;
_future = Future.delayed(_perFrame, () {
if (flag != _flag) return;
if (_event != null) {
stage.onMouseMove(PointerHoverInfo.fromDetails(stage, _event!));
_event = null;
}
_future = null;
});
},
child: child,
);
}
return child;
}