Commit 1d9f834f authored by Michael Goderbauer's avatar Michael Goderbauer Committed by GitHub

a11y: handle left/right scrolls correctly (#11309)

* a11y: handle left/right scrolls correctly

* fix keep alive test

* fix scaffold test
parent b551f534
...@@ -267,6 +267,7 @@ class DrawerControllerState extends State<DrawerController> with SingleTickerPro ...@@ -267,6 +267,7 @@ class DrawerControllerState extends State<DrawerController> with SingleTickerPro
onHorizontalDragUpdate: _move, onHorizontalDragUpdate: _move,
onHorizontalDragEnd: _settle, onHorizontalDragEnd: _settle,
onHorizontalDragCancel: _handleDragCancel, onHorizontalDragCancel: _handleDragCancel,
excludeFromSemantics: true,
child: new RepaintBoundary( child: new RepaintBoundary(
child: new Stack( child: new Stack(
children: <Widget>[ children: <Widget>[
......
...@@ -728,7 +728,7 @@ class _GestureSemantics extends SingleChildRenderObjectWidget { ...@@ -728,7 +728,7 @@ class _GestureSemantics extends SingleChildRenderObjectWidget {
renderObject renderObject
..onTap = recognizers.containsKey(TapGestureRecognizer) ? _handleTap : null ..onTap = recognizers.containsKey(TapGestureRecognizer) ? _handleTap : null
..onLongPress = recognizers.containsKey(LongPressGestureRecognizer) ? _handleLongPress : null ..onLongPress = recognizers.containsKey(LongPressGestureRecognizer) ? _handleLongPress : null
..onHorizontalDragUpdate = recognizers.containsKey(VerticalDragGestureRecognizer) || ..onHorizontalDragUpdate = recognizers.containsKey(HorizontalDragGestureRecognizer) ||
recognizers.containsKey(PanGestureRecognizer) ? _handleHorizontalDragUpdate : null recognizers.containsKey(PanGestureRecognizer) ? _handleHorizontalDragUpdate : null
..onVerticalDragUpdate = recognizers.containsKey(VerticalDragGestureRecognizer) || ..onVerticalDragUpdate = recognizers.containsKey(VerticalDragGestureRecognizer) ||
recognizers.containsKey(PanGestureRecognizer) ? _handleVerticalDragUpdate : null; recognizers.containsKey(PanGestureRecognizer) ? _handleVerticalDragUpdate : null;
......
// 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>[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>[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);
});
}
...@@ -219,7 +219,7 @@ void main() { ...@@ -219,7 +219,7 @@ void main() {
' │ constraints: BoxConstraints(w=800.0, h=600.0)\n' ' │ constraints: BoxConstraints(w=800.0, h=600.0)\n'
' │ semantic boundary\n' ' │ semantic boundary\n'
' │ size: Size(800.0, 600.0)\n' ' │ size: Size(800.0, 600.0)\n'
' │ gestures: horizontal scroll, vertical scroll\n' ' │ gestures: vertical scroll\n'
' │\n' ' │\n'
' └─child: RenderPointerListener#00000\n' ' └─child: RenderPointerListener#00000\n'
' │ creator: Listener ← _GestureSemantics ←\n' ' │ creator: Listener ← _GestureSemantics ←\n'
...@@ -389,7 +389,7 @@ void main() { ...@@ -389,7 +389,7 @@ void main() {
' │ constraints: BoxConstraints(w=800.0, h=600.0)\n' ' │ constraints: BoxConstraints(w=800.0, h=600.0)\n'
' │ semantic boundary\n' ' │ semantic boundary\n'
' │ size: Size(800.0, 600.0)\n' ' │ size: Size(800.0, 600.0)\n'
' │ gestures: horizontal scroll, vertical scroll\n' ' │ gestures: vertical scroll\n'
' │\n' ' │\n'
' └─child: RenderPointerListener#00000\n' ' └─child: RenderPointerListener#00000\n'
' │ creator: Listener ← _GestureSemantics ←\n' ' │ creator: Listener ← _GestureSemantics ←\n'
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment