Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit 20a78ed

Browse files
authored
Revert "Use semantics label for backbutton and closebutton for Android" (#111305)
1 parent c6d44e2 commit 20a78ed

File tree

2 files changed

+11
-91
lines changed

2 files changed

+11
-91
lines changed

packages/flutter/lib/src/material/back_button.dart

Lines changed: 9 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -27,31 +27,22 @@ class BackButtonIcon extends StatelessWidget {
2727
/// the current platform (as obtained from the [Theme]).
2828
const BackButtonIcon({ super.key });
2929

30-
@override
31-
Widget build(BuildContext context) {
32-
final String? semanticsLabel;
33-
final IconData data;
34-
switch (Theme.of(context).platform) {
30+
/// Returns the appropriate "back" icon for the given `platform`.
31+
static IconData _getIconData(TargetPlatform platform) {
32+
switch (platform) {
3533
case TargetPlatform.android:
36-
// Android uses semantics label to annotate the back button.
37-
semanticsLabel = MaterialLocalizations.of(context).backButtonTooltip;
38-
data = Icons.arrow_back;
39-
break;
4034
case TargetPlatform.fuchsia:
4135
case TargetPlatform.linux:
4236
case TargetPlatform.windows:
43-
semanticsLabel = null;
44-
data = Icons.arrow_back;
45-
break;
37+
return Icons.arrow_back;
4638
case TargetPlatform.iOS:
4739
case TargetPlatform.macOS:
48-
data = Icons.arrow_back_ios;
49-
semanticsLabel = null;
50-
break;
40+
return Icons.arrow_back_ios;
5141
}
52-
53-
return Icon(data, semanticLabel: semanticsLabel);
5442
}
43+
44+
@override
45+
Widget build(BuildContext context) => Icon(_getIconData(Theme.of(context).platform));
5546
}
5647

5748
/// A Material Design back button.
@@ -158,22 +149,8 @@ class CloseButton extends StatelessWidget {
158149
@override
159150
Widget build(BuildContext context) {
160151
assert(debugCheckHasMaterialLocalizations(context));
161-
final String? semanticsLabel;
162-
switch (Theme.of(context).platform) {
163-
case TargetPlatform.android:
164-
// Android uses semantics label to annotate the close button.
165-
semanticsLabel = MaterialLocalizations.of(context).closeButtonTooltip;
166-
break;
167-
case TargetPlatform.fuchsia:
168-
case TargetPlatform.linux:
169-
case TargetPlatform.windows:
170-
case TargetPlatform.iOS:
171-
case TargetPlatform.macOS:
172-
semanticsLabel = null;
173-
break;
174-
}
175152
return IconButton(
176-
icon: Icon(Icons.close, semanticLabel: semanticsLabel),
153+
icon: const Icon(Icons.close),
177154
color: color,
178155
tooltip: MaterialLocalizations.of(context).closeButtonTooltip,
179156
onPressed: () {

packages/flutter/test/material/back_button_test.dart

Lines changed: 2 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

5-
import 'package:flutter/foundation.dart';
65
import 'package:flutter/material.dart';
76
import 'package:flutter_test/flutter_test.dart';
87

@@ -153,73 +152,17 @@ void main() {
153152
tester.state<NavigatorState>(find.byType(Navigator)).pushNamed('/next');
154153

155154
await tester.pumpAndSettle();
156-
final String? expectedLabel;
157-
switch(defaultTargetPlatform) {
158-
case TargetPlatform.android:
159-
expectedLabel = 'Back';
160-
break;
161-
case TargetPlatform.fuchsia:
162-
case TargetPlatform.iOS:
163-
case TargetPlatform.linux:
164-
case TargetPlatform.macOS:
165-
case TargetPlatform.windows:
166-
expectedLabel = null;
167-
}
155+
168156
expect(tester.getSemantics(find.byType(BackButton)), matchesSemantics(
169157
tooltip: 'Back',
170-
label: expectedLabel,
171-
isButton: true,
172-
hasEnabledState: true,
173-
isEnabled: true,
174-
hasTapAction: true,
175-
isFocusable: true,
176-
));
177-
handle.dispose();
178-
}, variant: TargetPlatformVariant.all());
179-
180-
testWidgets('CloseButton semantics', (WidgetTester tester) async {
181-
final SemanticsHandle handle = tester.ensureSemantics();
182-
await tester.pumpWidget(
183-
MaterialApp(
184-
home: const Material(child: Text('Home')),
185-
routes: <String, WidgetBuilder>{
186-
'/next': (BuildContext context) {
187-
return const Material(
188-
child: Center(
189-
child: CloseButton(),
190-
),
191-
);
192-
},
193-
},
194-
),
195-
);
196-
197-
tester.state<NavigatorState>(find.byType(Navigator)).pushNamed('/next');
198-
199-
await tester.pumpAndSettle();
200-
final String? expectedLabel;
201-
switch(defaultTargetPlatform) {
202-
case TargetPlatform.android:
203-
expectedLabel = 'Close';
204-
break;
205-
case TargetPlatform.fuchsia:
206-
case TargetPlatform.iOS:
207-
case TargetPlatform.linux:
208-
case TargetPlatform.macOS:
209-
case TargetPlatform.windows:
210-
expectedLabel = null;
211-
}
212-
expect(tester.getSemantics(find.byType(CloseButton)), matchesSemantics(
213-
tooltip: 'Close',
214-
label: expectedLabel,
215158
isButton: true,
216159
hasEnabledState: true,
217160
isEnabled: true,
218161
hasTapAction: true,
219162
isFocusable: true,
220163
));
221164
handle.dispose();
222-
}, variant: TargetPlatformVariant.all());
165+
});
223166

224167
testWidgets('CloseButton color', (WidgetTester tester) async {
225168
await tester.pumpWidget(

0 commit comments

Comments
 (0)