@@ -1130,6 +1130,70 @@ void main() {
1130
1130
}
1131
1131
});
1132
1132
1133
+ testWidgets ('Enable filtering with custom filter callback that filter text case sensitive' , (WidgetTester tester) async {
1134
+ final ThemeData themeData = ThemeData ();
1135
+ final TextEditingController controller = TextEditingController ();
1136
+ addTearDown (controller.dispose);
1137
+
1138
+ await tester.pumpWidget (MaterialApp (
1139
+ theme: themeData,
1140
+ home: Scaffold (
1141
+ body: DropdownMenu <TestMenu >(
1142
+ requestFocusOnTap: true ,
1143
+ enableFilter: true ,
1144
+ filterCallback: (List <DropdownMenuEntry <TestMenu >> entries, String filter) {
1145
+ return entries.where ((DropdownMenuEntry <TestMenu > element) => element.label.contains (filter)).toList ();
1146
+ },
1147
+ dropdownMenuEntries: menuChildren,
1148
+ controller: controller,
1149
+ ),
1150
+ ),
1151
+ ));
1152
+
1153
+ // Open the menu.
1154
+ await tester.tap (find.byType (DropdownMenu <TestMenu >));
1155
+ await tester.pump ();
1156
+
1157
+ await tester.enterText (find.byType (TextField ).first, 'item' );
1158
+ expect (controller.text, 'item' );
1159
+ await tester.pumpAndSettle ();
1160
+ for (final TestMenu menu in TestMenu .values) {
1161
+ expect (find.widgetWithText (MenuItemButton , menu.label).hitTestable (), findsNothing);
1162
+ }
1163
+
1164
+ await tester.enterText (find.byType (TextField ).first, 'Item' );
1165
+ expect (controller.text, 'Item' );
1166
+ await tester.pumpAndSettle ();
1167
+ expect (find.widgetWithText (MenuItemButton , 'Item 0' ).hitTestable (), findsOneWidget);
1168
+ expect (find.widgetWithText (MenuItemButton , 'Menu 1' ).hitTestable (), findsNothing);
1169
+ expect (find.widgetWithText (MenuItemButton , 'Item 2' ).hitTestable (), findsOneWidget);
1170
+ expect (find.widgetWithText (MenuItemButton , 'Item 3' ).hitTestable (), findsOneWidget);
1171
+ expect (find.widgetWithText (MenuItemButton , 'Item 4' ).hitTestable (), findsOneWidget);
1172
+ expect (find.widgetWithText (MenuItemButton , 'Item 5' ).hitTestable (), findsOneWidget);
1173
+ });
1174
+
1175
+ testWidgets ('Throw assertion error when enable filtering with custom filter callback and enableFilter set on False' , (WidgetTester tester) async {
1176
+ final ThemeData themeData = ThemeData ();
1177
+ final TextEditingController controller = TextEditingController ();
1178
+ addTearDown (controller.dispose);
1179
+
1180
+ expect ((){
1181
+ MaterialApp (
1182
+ theme: themeData,
1183
+ home: Scaffold (
1184
+ body: DropdownMenu <TestMenu >(
1185
+ requestFocusOnTap: true ,
1186
+ filterCallback: (List <DropdownMenuEntry <TestMenu >> entries, String filter) {
1187
+ return entries.where ((DropdownMenuEntry <TestMenu > element) => element.label.contains (filter)).toList ();
1188
+ },
1189
+ dropdownMenuEntries: menuChildren,
1190
+ controller: controller,
1191
+ ),
1192
+ ),
1193
+ );
1194
+ }, throwsAssertionError);
1195
+ });
1196
+
1133
1197
testWidgets ('The controller can access the value in the input field' , (WidgetTester tester) async {
1134
1198
final ThemeData themeData = ThemeData ();
1135
1199
final TextEditingController controller = TextEditingController ();
0 commit comments