From e89c29a642a20a2fd00a1b04972f6c2bb13e7fe8 Mon Sep 17 00:00:00 2001 From: Alex Talebi <31685655+SalehTZ@users.noreply.github.com> Date: Thu, 31 Jul 2025 07:07:18 +0330 Subject: [PATCH] feat: Add `cursorHeight` to `DropdownMenu` (#172615) This change adds the `cursorHeight` property to `DropdownMenu`, allowing developers to customize the cursor height in the text field within the dropdown. The `cursorHeight` property is passed down to the underlying `TextField` widget. fixes #172425 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md --------- Co-authored-by: Qun Cheng <36861262+QuncCccccc@users.noreply.github.com> --- .../flutter/lib/src/material/dropdown_menu.dart | 5 +++++ .../test/material/dropdown_menu_test.dart | 17 +++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/packages/flutter/lib/src/material/dropdown_menu.dart b/packages/flutter/lib/src/material/dropdown_menu.dart index 703962f7b7b..9d3504bbe5e 100644 --- a/packages/flutter/lib/src/material/dropdown_menu.dart +++ b/packages/flutter/lib/src/material/dropdown_menu.dart @@ -194,6 +194,7 @@ class DropdownMenu extends StatefulWidget { this.closeBehavior = DropdownMenuCloseBehavior.all, this.maxLines = 1, this.textInputAction, + this.cursorHeight, this.restorationId, }) : assert(filterCallback == null || enableFilter), assert( @@ -558,6 +559,9 @@ class DropdownMenu extends StatefulWidget { /// {@macro flutter.widgets.TextField.textInputAction} final TextInputAction? textInputAction; + /// {@macro flutter.widgets.editableText.cursorHeight} + final double? cursorHeight; + /// {@macro flutter.material.textfield.restorationId} final String? restorationId; @@ -1112,6 +1116,7 @@ class _DropdownMenuState extends State> { textAlignVertical: TextAlignVertical.center, maxLines: widget.maxLines, textInputAction: widget.textInputAction, + cursorHeight: widget.cursorHeight, style: effectiveTextStyle, controller: _effectiveTextEditingController, onEditingComplete: _handleEditingComplete, diff --git a/packages/flutter/test/material/dropdown_menu_test.dart b/packages/flutter/test/material/dropdown_menu_test.dart index 89d66a32332..33d44810e9e 100644 --- a/packages/flutter/test/material/dropdown_menu_test.dart +++ b/packages/flutter/test/material/dropdown_menu_test.dart @@ -4515,6 +4515,23 @@ void main() { expect(selectedValueText.style.color, disabledColor); }, ); + + testWidgets('DropdownMenu can set cursorHeight', (WidgetTester tester) async { + const double cursorHeight = 4.0; + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + body: DropdownMenu( + cursorHeight: cursorHeight, + dropdownMenuEntries: menuChildren, + ), + ), + ), + ); + + final EditableText editableText = tester.widget(find.byType(EditableText)); + expect(editableText.cursorHeight, cursorHeight); + }); } enum TestMenu {