diff --git a/packages/flutter/lib/src/material/drawer.dart b/packages/flutter/lib/src/material/drawer.dart index 2eeafc5055..b0de388092 100644 --- a/packages/flutter/lib/src/material/drawer.dart +++ b/packages/flutter/lib/src/material/drawer.dart @@ -267,6 +267,7 @@ class DrawerControllerState extends State with SingleTickerPro onHorizontalDragUpdate: _move, onHorizontalDragEnd: _settle, onHorizontalDragCancel: _handleDragCancel, + excludeFromSemantics: true, child: new RepaintBoundary( child: new Stack( children: [ diff --git a/packages/flutter/lib/src/widgets/gesture_detector.dart b/packages/flutter/lib/src/widgets/gesture_detector.dart index f9a8aead3d..96aa08efee 100644 --- a/packages/flutter/lib/src/widgets/gesture_detector.dart +++ b/packages/flutter/lib/src/widgets/gesture_detector.dart @@ -728,7 +728,7 @@ class _GestureSemantics extends SingleChildRenderObjectWidget { renderObject ..onTap = recognizers.containsKey(TapGestureRecognizer) ? _handleTap : null ..onLongPress = recognizers.containsKey(LongPressGestureRecognizer) ? _handleLongPress : null - ..onHorizontalDragUpdate = recognizers.containsKey(VerticalDragGestureRecognizer) || + ..onHorizontalDragUpdate = recognizers.containsKey(HorizontalDragGestureRecognizer) || recognizers.containsKey(PanGestureRecognizer) ? _handleHorizontalDragUpdate : null ..onVerticalDragUpdate = recognizers.containsKey(VerticalDragGestureRecognizer) || recognizers.containsKey(PanGestureRecognizer) ? _handleVerticalDragUpdate : null; diff --git a/packages/flutter/test/widgets/gesture_detector_semantics_test.dart b/packages/flutter/test/widgets/gesture_detector_semantics_test.dart new file mode 100644 index 0000000000..f94dbd9d1a --- /dev/null +++ b/packages/flutter/test/widgets/gesture_detector_semantics_test.dart @@ -0,0 +1,75 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter_test/flutter_test.dart'; +import 'package:flutter/rendering.dart'; +import 'package:flutter/widgets.dart'; + +import 'semantics_tester.dart'; + +void main() { + testWidgets('Vertical gesture detector has up/down actions', (WidgetTester tester) async { + final SemanticsTester semantics = new SemanticsTester(tester); + + int callCount = 0; + final GlobalKey detectorKey = new GlobalKey(); + + await tester.pumpWidget( + new Center( + child: new GestureDetector( + key: detectorKey, + onVerticalDragStart: (DragStartDetails _) { + callCount += 1; + }, + child: new Container(), + ), + ) + ); + + expect(semantics, includesNodeWith( + actions: [SemanticsAction.scrollUp, SemanticsAction.scrollDown]) + ); + + final int detectorId = detectorKey.currentContext.findRenderObject().debugSemantics.id; + tester.binding.pipelineOwner.semanticsOwner.performAction(detectorId, SemanticsAction.scrollLeft); + tester.binding.pipelineOwner.semanticsOwner.performAction(detectorId, SemanticsAction.scrollRight); + expect(callCount, 0); + tester.binding.pipelineOwner.semanticsOwner.performAction(detectorId, SemanticsAction.scrollUp); + expect(callCount, 1); + tester.binding.pipelineOwner.semanticsOwner.performAction(detectorId, SemanticsAction.scrollDown); + expect(callCount, 2); + }); + + testWidgets('Horizontal gesture detector has up/down actions', (WidgetTester tester) async { + final SemanticsTester semantics = new SemanticsTester(tester); + + int callCount = 0; + final GlobalKey detectorKey = new GlobalKey(); + + await tester.pumpWidget( + new Center( + child: new GestureDetector( + key: detectorKey, + onHorizontalDragStart: (DragStartDetails _) { + callCount += 1; + }, + child: new Container(), + ), + ) + ); + + expect(semantics, includesNodeWith( + actions: [SemanticsAction.scrollLeft, SemanticsAction.scrollRight]) + ); + + final int detectorId = detectorKey.currentContext.findRenderObject().debugSemantics.id; + tester.binding.pipelineOwner.semanticsOwner.performAction(detectorId, SemanticsAction.scrollUp); + tester.binding.pipelineOwner.semanticsOwner.performAction(detectorId, SemanticsAction.scrollDown); + expect(callCount, 0); + tester.binding.pipelineOwner.semanticsOwner.performAction(detectorId, SemanticsAction.scrollLeft); + expect(callCount, 1); + tester.binding.pipelineOwner.semanticsOwner.performAction(detectorId, SemanticsAction.scrollRight); + expect(callCount, 2); + }); +} diff --git a/packages/flutter/test/widgets/keep_alive_test.dart b/packages/flutter/test/widgets/keep_alive_test.dart index 4ef696dc74..f4eea83b9f 100644 --- a/packages/flutter/test/widgets/keep_alive_test.dart +++ b/packages/flutter/test/widgets/keep_alive_test.dart @@ -219,7 +219,7 @@ void main() { ' │ constraints: BoxConstraints(w=800.0, h=600.0)\n' ' │ semantic boundary\n' ' │ size: Size(800.0, 600.0)\n' - ' │ gestures: horizontal scroll, vertical scroll\n' + ' │ gestures: vertical scroll\n' ' │\n' ' └─child: RenderPointerListener#00000\n' ' │ creator: Listener ← _GestureSemantics ←\n' @@ -389,7 +389,7 @@ void main() { ' │ constraints: BoxConstraints(w=800.0, h=600.0)\n' ' │ semantic boundary\n' ' │ size: Size(800.0, 600.0)\n' - ' │ gestures: horizontal scroll, vertical scroll\n' + ' │ gestures: vertical scroll\n' ' │\n' ' └─child: RenderPointerListener#00000\n' ' │ creator: Listener ← _GestureSemantics ←\n'