Skip to content

Commit cd2dfbd

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 c813151 commit cd2dfbd

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
@@ -372,11 +372,29 @@ class _ScrollablePositionedListState extends State<ScrollablePositionedList>
372372
builder: (context, constraints) {
373373
final cacheExtent = _cacheExtent(constraints);
374374
return Listener(
375+
onPointerDown: (event) {
376+
// here we're checking if it's tap by touchscreen
377+
_isTouchScreen = event.kind == PointerDeviceKind.touch ||
378+
event.kind == PointerDeviceKind.trackpad;
379+
},
375380
onPointerMove: (event) {
376-
_isTouchScreen = event.kind == PointerDeviceKind.touch || event.kind == PointerDeviceKind.trackpad;
381+
// onPointerMove triggers when finger are dragging to scroll
382+
_isTouchScreen = event.kind == PointerDeviceKind.touch ||
383+
event.kind == PointerDeviceKind.trackpad;
377384
},
378385
onPointerHover: (event) {
379-
_isTouchScreen = event.kind == PointerDeviceKind.touch || event.kind == PointerDeviceKind.trackpad;
386+
_isTouchScreen = event.kind == PointerDeviceKind.touch ||
387+
event.kind == PointerDeviceKind.trackpad;
388+
},
389+
onPointerPanZoomStart: (event) {
390+
// onPointerPanZoomStart triggers when scrolling by touchpad
391+
_isTouchScreen = event.kind == PointerDeviceKind.touch ||
392+
event.kind == PointerDeviceKind.trackpad;
393+
},
394+
onPointerSignal: (event) {
395+
if (event is PointerScrollEvent) {
396+
_isTouchScreen = event.kind != PointerDeviceKind.mouse;
397+
}
380398
},
381399
child: GestureDetector(
382400
onPanDown: (_) => _stopScroll(canceled: true),

0 commit comments

Comments
 (0)