diff --git a/packages/flutter/lib/src/material/dropdown_menu.dart b/packages/flutter/lib/src/material/dropdown_menu.dart index 4bf3cee597..51a972a339 100644 --- a/packages/flutter/lib/src/material/dropdown_menu.dart +++ b/packages/flutter/lib/src/material/dropdown_menu.dart @@ -612,9 +612,7 @@ class _DropdownMenuState extends State> { if (!widget.enableSearch) { currentHighlight = null; } - if (_textEditingController.text.isNotEmpty) { - controller.close(); - } + controller.close(); }, onTap: () { handlePressed(controller); diff --git a/packages/flutter/test/material/dropdown_menu_test.dart b/packages/flutter/test/material/dropdown_menu_test.dart index d61d1764a8..a721cfdb87 100644 --- a/packages/flutter/test/material/dropdown_menu_test.dart +++ b/packages/flutter/test/material/dropdown_menu_test.dart @@ -1050,6 +1050,34 @@ void main() { expect(controller.text, 'New Item'); }); + testWidgets('The menu should be closed after text editing is complete', (WidgetTester tester) async { + final ThemeData themeData = ThemeData(); + final TextEditingController controller = TextEditingController(); + await tester.pumpWidget(MaterialApp( + theme: themeData, + home: Scaffold( + body: DropdownMenu( + requestFocusOnTap: true, + enableFilter: true, + dropdownMenuEntries: menuChildren, + controller: controller, + ), + ), + )); + // Access the MenuAnchor + final MenuAnchor menuAnchor = tester.widget(find.byType(MenuAnchor)); + + // Open the menu + await tester.tap(find.byType(DropdownMenu)); + await tester.pumpAndSettle(); + expect(menuAnchor.controller!.isOpen, true); + + // Simulate `TextInputAction.done` on textfield + await tester.testTextInput.receiveAction(TextInputAction.done); + await tester.pumpAndSettle(); + expect(menuAnchor.controller!.isOpen, false); + }); + testWidgets('The onSelected gets called only when a selection is made', (WidgetTester tester) async { int selectionCount = 0;