Found the answer, and I've packaged into a widget
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class DualAxisScrollWrapper extends StatelessWidget {
final Widget child;
final ScrollController horizontalController;
final ScrollController verticalController;
const DualAxisScrollWrapper({
super.key,
required this.child,
required this.horizontalController,
required this.verticalController,
});
@override
Widget build(BuildContext context) {
return Listener(
onPointerSignal: (pointerSignal) {
if (pointerSignal is PointerScrollEvent) {
final isShiftPressed = HardwareKeyboard.instance.logicalKeysPressed.contains(LogicalKeyboardKey.shiftLeft) ||
HardwareKeyboard.instance.logicalKeysPressed.contains(LogicalKeyboardKey.shiftRight);
if (isShiftPressed) {
horizontalController.jumpTo(
horizontalController.offset + pointerSignal.scrollDelta.dy,
);
} else {
verticalController.jumpTo(
verticalController.offset + pointerSignal.scrollDelta.dy,
);
}
}
},
child: child,
);
}
}
Listenerwidget does not report anyPointerScrollEventevents inonPointerSignalcallback then i dont think you can do much - try to useListenerand check if any different events are generated when shift is down