Skip to content

Commit fca251a

Browse files
committed
Optimization of switching between different scroll devices: touchscreen/touchpad/mouse wheel. From Flutter 3.3.0 there is new Listener's event usage
(see flutter/flutter#112880 (comment))
1 parent 93b3644 commit fca251a

File tree

1 file changed

+20
-2
lines changed

1 file changed

+20
-2
lines changed

packages/scrollable_positioned_list/lib/src/scrollable_positioned_list.dart

+20-2
Original file line numberDiff line numberDiff line change
@@ -442,11 +442,29 @@ class _ScrollablePositionedListState extends State<ScrollablePositionedList>
442442
builder: (context, constraints) {
443443
final cacheExtent = _cacheExtent(constraints);
444444
return Listener(
445+
onPointerDown: (event) {
446+
// here we're checking if it's tap by touchscreen
447+
_isTouchScreen = event.kind == PointerDeviceKind.touch ||
448+
event.kind == PointerDeviceKind.trackpad;
449+
},
445450
onPointerMove: (event) {
446-
_isTouchScreen = event.kind == PointerDeviceKind.touch || event.kind == PointerDeviceKind.trackpad;
451+
// onPointerMove triggers when finger are dragging to scroll
452+
_isTouchScreen = event.kind == PointerDeviceKind.touch ||
453+
event.kind == PointerDeviceKind.trackpad;
447454
},
448455
onPointerHover: (event) {
449-
_isTouchScreen = event.kind == PointerDeviceKind.touch || event.kind == PointerDeviceKind.trackpad;
456+
_isTouchScreen = event.kind == PointerDeviceKind.touch ||
457+
event.kind == PointerDeviceKind.trackpad;
458+
},
459+
onPointerPanZoomStart: (event) {
460+
// onPointerPanZoomStart triggers when scrolling by touchpad
461+
_isTouchScreen = event.kind == PointerDeviceKind.touch ||
462+
event.kind == PointerDeviceKind.trackpad;
463+
},
464+
onPointerSignal: (event) {
465+
if (event is PointerScrollEvent) {
466+
_isTouchScreen = event.kind != PointerDeviceKind.mouse;
467+
}
450468
},
451469
child: GestureDetector(
452470
onPanDown: (_) => _stopScroll(canceled: true),

0 commit comments

Comments
 (0)