Add DropdownMenuFormField.decorationBuilder (#178640)

## Description

This PR adds `DropdownMenuFormField.decorationBuilder` and passes it to
the underlying `DropdownMenu`.

## Related Issue

Follow-up to https://github.com/flutter/flutter/pull/176264 which added
`DropdownMenu.decorationBuilder`.

## Tests

- Adds 1 test.
This commit is contained in:
Bruno Leroux 2025-11-17 23:14:49 +01:00 committed by GitHub
parent 2805900c57
commit 4b33f98a01
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 32 additions and 0 deletions

View File

@ -50,6 +50,7 @@ class DropdownMenuFormField<T extends Object> extends FormField<T> {
TextAlign textAlign = TextAlign.start,
// TODO(bleroux): Clean this up once `InputDecorationTheme` is fully normalized.
Object? inputDecorationTheme,
DropdownMenuDecorationBuilder? decorationBuilder,
MenuStyle? menuStyle,
this.controller,
T? initialSelection,
@ -95,6 +96,7 @@ class DropdownMenuFormField<T extends Object> extends FormField<T> {
textStyle: textStyle,
textAlign: textAlign,
inputDecorationTheme: inputDecorationTheme,
decorationBuilder: decorationBuilder,
menuStyle: menuStyle,
controller: state.textFieldController,
initialSelection: state.value,

View File

@ -472,6 +472,36 @@ void main() {
expect(dropdownMenu.inputDecorationTheme, inputDecorationTheme);
});
testWidgets('Passes decorationBuilder to underlying DropdownMenu', (WidgetTester tester) async {
await tester.pumpWidget(
MaterialApp(
home: Scaffold(body: DropdownMenuFormField<MenuItem>(dropdownMenuEntries: menuEntries)),
),
);
// Check default value.
DropdownMenu<MenuItem> dropdownMenu = tester.widget(find.byType(DropdownMenu<MenuItem>));
expect(dropdownMenu.decorationBuilder, null);
InputDecoration buildDecoration(BuildContext context, MenuController controller) {
return const InputDecoration(labelText: 'labelText');
}
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: DropdownMenuFormField<MenuItem>(
decorationBuilder: buildDecoration,
dropdownMenuEntries: menuEntries,
),
),
),
);
dropdownMenu = tester.widget(find.byType(DropdownMenu<MenuItem>));
expect(dropdownMenu.decorationBuilder, buildDecoration);
});
testWidgets('Passes menuStyle to underlying DropdownMenu', (WidgetTester tester) async {
await tester.pumpWidget(
MaterialApp(