diff --git a/packages/flutter/lib/src/material/calendar_date_picker.dart b/packages/flutter/lib/src/material/calendar_date_picker.dart index e75a4f45de..6c96ec343e 100644 --- a/packages/flutter/lib/src/material/calendar_date_picker.dart +++ b/packages/flutter/lib/src/material/calendar_date_picker.dart @@ -435,7 +435,6 @@ class _DatePickerModeToggleButtonState extends State<_DatePickerModeToggleButton Flexible( child: Semantics( label: MaterialLocalizations.of(context).selectYearSemanticsLabel, - excludeSemantics: true, button: true, container: true, child: SizedBox( @@ -788,6 +787,8 @@ class _MonthPickerState extends State<_MonthPicker> { final Color controlColor = Theme.of(context).colorScheme.onSurface.withOpacity(0.60); return Semantics( + container: true, + explicitChildNodes: true, child: Column( children: [ SizedBox( diff --git a/packages/flutter/test/material/calendar_date_picker_test.dart b/packages/flutter/test/material/calendar_date_picker_test.dart index b6eb7c577a..d166040f84 100644 --- a/packages/flutter/test/material/calendar_date_picker_test.dart +++ b/packages/flutter/test/material/calendar_date_picker_test.dart @@ -855,8 +855,11 @@ void main() { // Year mode drop down button. expect(tester.getSemantics(find.text('January 2016')), matchesSemantics( - label: 'Select year', + label: 'Select year\nJanuary 2016', isButton: true, + hasTapAction: true, + hasFocusAction: true, + isFocusable: true, )); // Prev/Next month buttons. @@ -1104,8 +1107,11 @@ void main() { // Year mode drop down button. expect(tester.getSemantics(find.text('January 2016')), matchesSemantics( - label: 'Select year', + label: 'Select year\nJanuary 2016', isButton: true, + hasTapAction: true, + hasFocusAction: true, + isFocusable: true, )); // Year grid only shows 2010 - 2024. diff --git a/packages/flutter/test/material/date_picker_test.dart b/packages/flutter/test/material/date_picker_test.dart index 6eb2b59462..530f78d103 100644 --- a/packages/flutter/test/material/date_picker_test.dart +++ b/packages/flutter/test/material/date_picker_test.dart @@ -11,6 +11,7 @@ import 'dart:ui'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; import '../widgets/clipboard_utils.dart'; @@ -1682,6 +1683,23 @@ void main() { }); semantics.dispose(); }); + + // Regression test for https://github.com/flutter/flutter/pull/152705 + testWidgets('datepicker dialog semantics node not focusable', (WidgetTester tester) async { + await tester.pumpWidget(MaterialApp( + home: Material( + child: DatePickerDialog( + initialDate: initialDate, + firstDate: firstDate, + lastDate: lastDate, + ), + ), + )); + + final SemanticsNode node = tester.semantics.find(find.byType(DatePickerDialog)); + final SemanticsData semanticsData = node.getSemanticsData(); + expect(semanticsData.hasFlag(SemanticsFlag.isFocusable), false); + }); }); group('Keyboard navigation', () {