applyMouseMoveGesturesDetectors function

Widget applyMouseMoveGesturesDetectors(
  1. Stage stage,
  2. Widget child
)

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;
}