mirror of
https://github.com/flutter/flutter.git
synced 2026-02-12 22:03:04 +08:00
Wire selectedItemBuilder through DropdownButtonFormField (#44160)
This commit is contained in:
parent
4bf2e55790
commit
1663fde347
@ -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);
|
||||
});
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user