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

* a11y: handle left/right scrolls correctly

* fix keep alive test

* fix scaffold test
This commit is contained in:
Michael Goderbauer 2017-08-08 14:42:17 -07:00 committed by GitHub
parent b551f53471
commit 1d9f834fb2
4 changed files with 79 additions and 3 deletions

View File

@ -267,6 +267,7 @@ class DrawerControllerState extends State<DrawerController> with SingleTickerPro
onHorizontalDragUpdate: _move,
onHorizontalDragEnd: _settle,
onHorizontalDragCancel: _handleDragCancel,
excludeFromSemantics: true,
child: new RepaintBoundary(
child: new Stack(
children: <Widget>[

View File

@ -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;

View File

@ -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>[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);
});
}

View File

@ -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'