From 1029282f31bcd8de8230c9ea0593a461adebc390 Mon Sep 17 00:00:00 2001 From: Ahmed Elsayed Date: Fri, 7 Mar 2025 20:20:30 +0200 Subject: [PATCH] Add semantics to dropdown menu items [Flutter core] --- packages/dropdown_button2/CHANGELOG.md | 1 + packages/dropdown_button2/lib/src/dropdown_button2.dart | 4 +++- .../dropdown_button2/lib/src/dropdown_menu_item.dart | 9 ++++++--- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/dropdown_button2/CHANGELOG.md b/packages/dropdown_button2/CHANGELOG.md index 69dfe9d..0d4eaaa 100644 --- a/packages/dropdown_button2/CHANGELOG.md +++ b/packages/dropdown_button2/CHANGELOG.md @@ -7,6 +7,7 @@ - Implement switch expressions. - Fix memory leak in CurvedAnimation [Flutter core]. - Avoid Container objects when possible for better performance [Flutter core]. +- Add semantics to dropdown menu items [Flutter core]. ## 3.0.0-beta.21 diff --git a/packages/dropdown_button2/lib/src/dropdown_button2.dart b/packages/dropdown_button2/lib/src/dropdown_button2.dart index 4667c79..a2c562c 100644 --- a/packages/dropdown_button2/lib/src/dropdown_button2.dart +++ b/packages/dropdown_button2/lib/src/dropdown_button2.dart @@ -882,8 +882,10 @@ class _DropdownButton2State extends State> ); } + final bool childHasButtonSemantic = hintIndex != null || + (_selectedIndex != null && widget.selectedItemBuilder == null); return Semantics( - button: true, + button: !childHasButtonSemantic, child: Actions( actions: _actionMap, child: InkWell( diff --git a/packages/dropdown_button2/lib/src/dropdown_menu_item.dart b/packages/dropdown_button2/lib/src/dropdown_menu_item.dart index 1ed6ee5..83fb071 100644 --- a/packages/dropdown_button2/lib/src/dropdown_menu_item.dart +++ b/packages/dropdown_button2/lib/src/dropdown_menu_item.dart @@ -111,9 +111,12 @@ class _DropdownMenuItemContainer extends StatelessWidget { @override Widget build(BuildContext context) { - return SizedBox( - height: intrinsicHeight ? null : height, - child: Align(alignment: alignment, child: child), + return Semantics( + button: true, + child: SizedBox( + height: intrinsicHeight ? null : height, + child: Align(alignment: alignment, child: child), + ), ); } }