From fd4d6d70d71ac84e95c2ed216eb567d306c846ff Mon Sep 17 00:00:00 2001 From: Greg Spencer Date: Thu, 7 May 2020 17:59:07 -0700 Subject: [PATCH] Remove semantics node generated by ExcludeFocus (#56568) --- packages/flutter/lib/src/widgets/focus_scope.dart | 1 + .../flutter/test/widgets/focus_scope_test.dart | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/packages/flutter/lib/src/widgets/focus_scope.dart b/packages/flutter/lib/src/widgets/focus_scope.dart index a609f38b3b..808c274ab8 100644 --- a/packages/flutter/lib/src/widgets/focus_scope.dart +++ b/packages/flutter/lib/src/widgets/focus_scope.dart @@ -997,6 +997,7 @@ class ExcludeFocus extends StatelessWidget { return Focus( canRequestFocus: false, skipTraversal: true, + includeSemantics: false, descendantsAreFocusable: !excluding, child: child, ); diff --git a/packages/flutter/test/widgets/focus_scope_test.dart b/packages/flutter/test/widgets/focus_scope_test.dart index 91fe139304..29d08baa65 100644 --- a/packages/flutter/test/widgets/focus_scope_test.dart +++ b/packages/flutter/test/widgets/focus_scope_test.dart @@ -8,6 +8,8 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter/semantics.dart'; +import 'semantics_tester.dart'; + class TestFocus extends StatefulWidget { const TestFocus({ Key key, @@ -1585,6 +1587,12 @@ void main() { expect(containerNode.hasFocus, isFalse); expect(unfocusableNode.hasFocus, isFalse); }); + testWidgets("Focus doesn't introduce a Semantics node when includeSemantics is false", (WidgetTester tester) async { + final SemanticsTester semantics = SemanticsTester(tester); + await tester.pumpWidget(Focus(includeSemantics: false, child: Container())); + final TestSemantics expectedSemantics = TestSemantics.root(); + expect(semantics, hasSemantics(expectedSemantics)); + }); }); group(ExcludeFocus, () { testWidgets("Descendants of ExcludeFocus aren't focusable.", (WidgetTester tester) async { @@ -1625,5 +1633,11 @@ void main() { expect(containerNode.hasFocus, isFalse); expect(unfocusableNode.hasFocus, isFalse); }); + testWidgets("ExcludeFocus doesn't introduce a Semantics node", (WidgetTester tester) async { + final SemanticsTester semantics = SemanticsTester(tester); + await tester.pumpWidget(ExcludeFocus(child: Container())); + final TestSemantics expectedSemantics = TestSemantics.root(); + expect(semantics, hasSemantics(expectedSemantics)); + }); }); }