• Jonah Williams's avatar
    [framework] make hit slop based on device pointer kind for drag/pan/scale gestures (#64267) · 29898812
    Jonah Williams authored
    Currently the framework uses fairly large "hit slop" values to disambiguate taps from drags/pans. This makes sense on touch devices where the interaction is not very precise, on mice however it can feel as if the UI is lagging. This is immediately noticeable on our infra dashboard, where it takes almost half of a grid square of drag before the actual drag kicks in.
    
    One potential solution is to always use smaller constants depending on whether the interaction is mouse or touch based. The only reasonable choice is to use the pointer device kind and not target platform - same platform can have different input sources. This requires exposing the pointer device kind in a few new places in several of the gesture detectors, and using the enum to compute the correct hit slop from an expanded set of constants.
    
    This almost works, however there are a few places (notably ListViews) which uses the touch hit slop as a default value in scroll physics. It does not seem like it will be easy to disambiguate a user provided scroll physics constant from the default and/or adjust it somehow - this might require significant changes to scroll physics which I have left out of this PR.
    
    This PR does not adjust:
    
    kTouchSlop used in scroll_physics.dart's minFlingDistance
    kTouchSlop used in PrimaryPointerGestureRecognizer/LongPressGestureRecognizer
    29898812
constants.dart 5.2 KB