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 {