Skip to content

Commit d62f1e4

Browse files
authored
Merge pull request #411 from AhmedLSayed9/fix_menu_width_with_outline_input_border
Fix dropdown menu width not matching button width with OutlineInputBorder
2 parents 7e5e0c4 + 7fc6167 commit d62f1e4

2 files changed

Lines changed: 17 additions & 3 deletions

File tree

packages/dropdown_button2/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
- Remove temporary fix for list not respecting itemCount when calling itemExtentBuilder.
44
- Fix selected index not updating when items list changes, closes #392.
5+
- Fix dropdown menu width not matching button width with OutlineInputBorder.
56

67
## 3.0.0-beta.24
78

packages/dropdown_button2/lib/src/dropdown_button2.dart

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -595,14 +595,27 @@ class _DropdownButton2State<T> extends State<DropdownButton2<T>> with WidgetsBin
595595
EdgeInsets? _getInputDecorationPadding() {
596596
// Return the contentPadding only if inputDecoration is defined.
597597
if (widget._inputDecoration case final decoration?) {
598+
final ThemeData theme = Theme.of(context);
598599
final TextDirection? textDirection = Directionality.maybeOf(context);
599-
// Use inputDecorationTheme.visualDensity when added (https://github.com/flutter/flutter/issues/166201#issuecomment-2774622584)
600-
final Offset densityOffset = Theme.of(context).visualDensity.baseSizeAdjustment;
600+
601601
final EdgeInsets? contentPadding =
602-
(decoration.contentPadding ?? Theme.of(context).inputDecorationTheme.contentPadding)
602+
(decoration.contentPadding ?? theme.inputDecorationTheme.contentPadding)
603603
?.resolve(textDirection);
604+
605+
// InputDecorator adds gapPadding horizontally for OutlineInputBorder.
606+
final border = decoration.border ?? theme.inputDecorationTheme.border;
607+
final double gapPadding = switch (border) {
608+
OutlineInputBorder(:final gapPadding) => gapPadding,
609+
_ => 0.0,
610+
};
611+
612+
// Use inputDecorationTheme.visualDensity when added (https://github.com/flutter/flutter/issues/166201#issuecomment-2774622584)
613+
final Offset densityOffset = theme.visualDensity.baseSizeAdjustment;
614+
604615
return contentPadding?.copyWith(
616+
left: contentPadding.left + gapPadding,
605617
top: math.max(0, contentPadding.top + densityOffset.dy / 2),
618+
right: contentPadding.right + gapPadding,
606619
bottom: math.max(0, contentPadding.bottom + densityOffset.dy / 2),
607620
);
608621
} else {

0 commit comments

Comments
 (0)