From ce2fe59bbb7ecbc820069724da834b373c0223c3 Mon Sep 17 00:00:00 2001 From: PurplePolyhedron <120297255+PurplePolyhedron@users.noreply.github.com> Date: Wed, 2 Oct 2024 13:46:23 +0800 Subject: [PATCH] fix `DropdownMenu` keyboard navigation when entries are filtered empty (#155252) fixes https://github.com/flutter/flutter/issues/154532 --- .../lib/src/material/dropdown_menu.dart | 1 + .../test/material/dropdown_menu_test.dart | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/packages/flutter/lib/src/material/dropdown_menu.dart b/packages/flutter/lib/src/material/dropdown_menu.dart index 2539dd6ef6..7050a4e161 100644 --- a/packages/flutter/lib/src/material/dropdown_menu.dart +++ b/packages/flutter/lib/src/material/dropdown_menu.dart @@ -807,6 +807,7 @@ class _DropdownMenuState extends State> { } else { filteredEntries = widget.dropdownMenuEntries; } + _menuHasEnabledItem = filteredEntries.any((DropdownMenuEntry entry) => entry.enabled); if (_enableSearch) { if (widget.searchCallback != null) { diff --git a/packages/flutter/test/material/dropdown_menu_test.dart b/packages/flutter/test/material/dropdown_menu_test.dart index 795be7eb21..f394799360 100644 --- a/packages/flutter/test/material/dropdown_menu_test.dart +++ b/packages/flutter/test/material/dropdown_menu_test.dart @@ -1315,6 +1315,28 @@ void main() { expect(tester.takeException(), isNull); }); + // Regression test for https://github.com/flutter/flutter/issues/154532. + testWidgets('Searching for non matching item does not crash', (WidgetTester tester) async { + await tester.pumpWidget(MaterialApp( + home: Scaffold( + body: DropdownMenu( + enableFilter: true, + requestFocusOnTap: true, + dropdownMenuEntries: menuChildren, + ), + ), + )); + + // Open the menu. + await tester.tap(find.byType(DropdownMenu)); + await tester.pump(); + await tester.enterText(find.byType(TextField).first, 'Me'); + await tester.pumpAndSettle(); + await tester.enterText(find.byType(TextField).first, 'Meu'); + await tester.pumpAndSettle(); + expect(tester.takeException(), isNull); + }); + // Regression test for https://github.com/flutter/flutter/issues/147253. testWidgets('Default search prioritises the current highlight on desktop platforms', (WidgetTester tester) async {