Wire selectedItemBuilder through DropdownButtonFormField (#44160)

This commit is contained in:
Shi-Hao Hong 2019-11-05 12:32:03 -08:00 committed by GitHub
parent 4bf2e55790
commit 1663fde347
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 46 additions and 0 deletions

View File

@ -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,

View File

@ -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);
});
}