From a752435fac22c4c47a7afe10bd12d2ede378e2db Mon Sep 17 00:00:00 2001 From: Per Classon Date: Wed, 15 Jan 2020 19:48:02 -0500 Subject: [PATCH] Exclude modal barrier Container in Drawer from Semantics on Android (#48841) --- packages/flutter/lib/src/material/drawer.dart | 22 ++++++++++--------- .../flutter/test/widgets/drawer_test.dart | 2 ++ 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/packages/flutter/lib/src/material/drawer.dart b/packages/flutter/lib/src/material/drawer.dart index 046feed189..69058e2ec7 100644 --- a/packages/flutter/lib/src/material/drawer.dart +++ b/packages/flutter/lib/src/material/drawer.dart @@ -542,18 +542,20 @@ class DrawerControllerState extends State with SingleTickerPro child: Stack( children: [ BlockSemantics( - child: GestureDetector( + child: ExcludeSemantics( // On Android, the back button is used to dismiss a modal. - excludeFromSemantics: platformHasBackButton, - onTap: close, - child: Semantics( - label: MaterialLocalizations.of(context)?.modalBarrierDismissLabel, - child: MouseRegion( - opaque: true, - child: Container( // The drawer's "scrim" - color: _scrimColorTween.evaluate(_controller), + excluding: platformHasBackButton, + child: GestureDetector( + onTap: close, + child: Semantics( + label: MaterialLocalizations.of(context)?.modalBarrierDismissLabel, + child: MouseRegion( + opaque: true, + child: Container( // The drawer's "scrim" + color: _scrimColorTween.evaluate(_controller), + ), ), - ) + ), ), ), ), diff --git a/packages/flutter/test/widgets/drawer_test.dart b/packages/flutter/test/widgets/drawer_test.dart index 40871742fe..5fe4c4c371 100644 --- a/packages/flutter/test/widgets/drawer_test.dart +++ b/packages/flutter/test/widgets/drawer_test.dart @@ -328,6 +328,7 @@ void main() { await tester.pump(const Duration(milliseconds: 100)); expect(semantics, includesNodeWith(actions: [SemanticsAction.tap])); + expect(semantics, includesNodeWith(label: 'Dismiss')); semantics.dispose(); @@ -357,6 +358,7 @@ void main() { await tester.pump(const Duration(milliseconds: 100)); expect(semantics, isNot(includesNodeWith(actions: [SemanticsAction.tap]))); + expect(semantics, isNot(includesNodeWith(label: 'Dismiss'))); semantics.dispose(); });