Hint text semantics to be excluded in a11y read out if textfield in not empty and label text is provided (#115010)

* update hint semantics

* Update input_date_picker_form_field_test.dart
This commit is contained in:
hangyu 2022-11-15 12:32:32 -08:00 committed by GitHub
parent 2d77ac5846
commit 136b46ba91
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 36 additions and 4 deletions

View File

@ -2136,7 +2136,7 @@ class _InputDecoratorState extends State<InputDecorator> with TickerProviderStat
opacity: (isEmpty && !_hasInlineLabel) ? 1.0 : 0.0,
duration: _kTransitionDuration,
curve: _kTransitionCurve,
alwaysIncludeSemantics: true,
alwaysIncludeSemantics: isEmpty || (decoration.labelText == null && decoration.label == null),
child: Text(
hintText,
style: hintStyle,

View File

@ -274,7 +274,7 @@ void main() {
await tester.pumpAndSettle();
expect(tester.getSemantics(find.byType(EditableText)), matchesSemantics(
label: 'Enter Date\nmm/dd/yyyy',
label: 'Enter Date',
isTextField: true,
isFocused: true,
value: '01/15/2016',

View File

@ -6586,7 +6586,39 @@ void main() {
expect(tester.getBottomLeft(find.byKey(keyB)).dy, rowBottomY);
});
testWidgets('TextField semantics include label when unfocused and label/hint when focused', (WidgetTester tester) async {
testWidgets('TextField semantics include label when unfocused and label/hint when focused if input is empty', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
final TextEditingController controller = TextEditingController(text: '');
final Key key = UniqueKey();
await tester.pumpWidget(
overlay(
child: TextField(
key: key,
controller: controller,
decoration: const InputDecoration(
hintText: 'hint',
labelText: 'label',
),
),
),
);
final SemanticsNode node = tester.getSemantics(find.byKey(key));
expect(node.label, 'label');
expect(node.value, '');
// Focus text field.
await tester.tap(find.byKey(key));
await tester.pump();
expect(node.label, 'label\nhint');
expect(node.value, '');
semantics.dispose();
});
testWidgets('TextField semantics alway include label and not hint when input value is not empty', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
final TextEditingController controller = TextEditingController(text: 'value');
final Key key = UniqueKey();
@ -6613,7 +6645,7 @@ void main() {
await tester.tap(find.byKey(key));
await tester.pump();
expect(node.label, 'label\nhint');
expect(node.label, 'label');
expect(node.value, 'value');
semantics.dispose();
});