diff --git a/packages/flutter/lib/src/widgets/scrollable.dart b/packages/flutter/lib/src/widgets/scrollable.dart index e1b207ef5b..01898852d1 100644 --- a/packages/flutter/lib/src/widgets/scrollable.dart +++ b/packages/flutter/lib/src/widgets/scrollable.dart @@ -15,6 +15,7 @@ import 'basic.dart'; import 'focus_manager.dart'; import 'framework.dart'; import 'gesture_detector.dart'; +import 'media_query.dart'; import 'notification_listener.dart'; import 'primary_scroll_controller.dart'; import 'restoration.dart'; @@ -399,6 +400,7 @@ class ScrollableState extends State with TickerProviderStateMixin, R late ScrollBehavior _configuration; ScrollPhysics? _physics; ScrollController? _fallbackScrollController; + MediaQueryData? _mediaQueryData; ScrollController get _effectiveScrollController => widget.controller ?? _fallbackScrollController!; @@ -452,6 +454,7 @@ class ScrollableState extends State with TickerProviderStateMixin, R @override void didChangeDependencies() { + _mediaQueryData = MediaQuery.maybeOf(context); _updatePosition(); super.didChangeDependencies(); } @@ -565,7 +568,8 @@ class ScrollableState extends State with TickerProviderStateMixin, R ..minFlingVelocity = _physics?.minFlingVelocity ..maxFlingVelocity = _physics?.maxFlingVelocity ..velocityTrackerBuilder = _configuration.velocityTrackerBuilder(context) - ..dragStartBehavior = widget.dragStartBehavior; + ..dragStartBehavior = widget.dragStartBehavior + ..gestureSettings = _mediaQueryData?.gestureSettings; }, ), }; @@ -585,7 +589,8 @@ class ScrollableState extends State with TickerProviderStateMixin, R ..minFlingVelocity = _physics?.minFlingVelocity ..maxFlingVelocity = _physics?.maxFlingVelocity ..velocityTrackerBuilder = _configuration.velocityTrackerBuilder(context) - ..dragStartBehavior = widget.dragStartBehavior; + ..dragStartBehavior = widget.dragStartBehavior + ..gestureSettings = _mediaQueryData?.gestureSettings; }, ), }; diff --git a/packages/flutter/test/widgets/media_query_test.dart b/packages/flutter/test/widgets/media_query_test.dart index 74b617f1bd..b36efe4d91 100644 --- a/packages/flutter/test/widgets/media_query_test.dart +++ b/packages/flutter/test/widgets/media_query_test.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:ui' show Brightness, DisplayFeature, DisplayFeatureState, DisplayFeatureType; +import 'dart:ui' show Brightness, DisplayFeature, DisplayFeatureState, DisplayFeatureType, GestureSettings, ViewConfiguration; import 'package:flutter/gestures.dart'; import 'package:flutter/widgets.dart'; @@ -914,4 +914,13 @@ void main() { expect(subScreenMediaQuery.highContrast, true); expect(subScreenMediaQuery.displayFeatures, [cutoutDisplayFeature]); }); + + testWidgets('MediaQuery.enableDeviceGestureSettings allows disabling gesture settings', (WidgetTester tester) async { + tester.binding.window.viewConfigurationTestValue = const ViewConfiguration( + gestureSettings: GestureSettings(physicalDoubleTapSlop: 100, physicalTouchSlop: 100), + ); + + expect(MediaQueryData.fromWindow(tester.binding.window).gestureSettings.touchSlop, closeTo(33.33, 0.1)); // Repeating, of course + tester.binding.window.viewConfigurationTestValue = null; + }); }