Unverified Commit 1663fde3 authored by Shi-Hao Hong's avatar Shi-Hao Hong Committed by GitHub

Wire selectedItemBuilder through DropdownButtonFormField (#44160)

parent 4bf2e557
......@@ -1299,6 +1299,7 @@ class DropdownButtonFormField<T> extends FormField<T> {
Key key,
T value,
@required List<DropdownMenuItem<T>> items,
DropdownButtonBuilder selectedItemBuilder,
Widget hint,
@required this.onChanged,
this.decoration = const InputDecoration(),
......@@ -1347,6 +1348,7 @@ class DropdownButtonFormField<T> extends FormField<T> {
child: DropdownButton<T>(
value: value,
items: items,
selectedItemBuilder: selectedItemBuilder,
hint: hint,
onChanged: onChanged == null ? null : field.didChange,
disabledHint: disabledHint,
......
......@@ -586,4 +586,48 @@ void main() {
);
}
});
testWidgets('DropdownButtonFormField - selectedItemBuilder builds custom buttons', (WidgetTester tester) async {
const List<String> items = <String>[
'One',
'Two',
'Three',
];
String selectedItem = items[0];
await tester.pumpWidget(
StatefulBuilder(
builder: (BuildContext context, StateSetter setState) {
return MaterialApp(
home: Scaffold(
body: DropdownButtonFormField<String>(
value: selectedItem,
onChanged: (String string) => setState(() => selectedItem = string),
selectedItemBuilder: (BuildContext context) {
int index = 0;
return items.map((String string) {
index += 1;
return Text('$string as an Arabic numeral: $index');
}).toList();
},
items: items.map((String string) {
return DropdownMenuItem<String>(
child: Text(string),
value: string,
);
}).toList(),
),
),
);
},
),
);
expect(find.text('One as an Arabic numeral: 1'), findsOneWidget);
await tester.tap(find.text('One as an Arabic numeral: 1'));
await tester.pumpAndSettle();
await tester.tap(find.text('Two'));
await tester.pumpAndSettle();
expect(find.text('Two as an Arabic numeral: 2'), findsOneWidget);
});
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment