Я хочу выполнить поиск в списке строк, но поисковый запрос не обязательно должен быть упорядоченным в результате.
Скажем, у меня есть список строк
List<String> a = [
Fracture of right arm,
Fracture of left arm,
Fracture of right leg,
Fracture of left leg,
];
и я хочу реализовать поисковый фильтр, чтобы при вводе fracture right
результатом было
Fracture of right leg
Fracture of right arm
Как мне это сделать во флаттере?
Потому что флаттер contains()
распознает только когда я печатаю fracture **of** right
Вы можете попробовать этот код:
var aFilter = a.where((p0) => (p0.toLowerCase().contains("fracture of right")).toList();
И вы получите новый список с отфильтрованными элементами.
Вы можете попробовать это:
List<String> a = [
"Fracture of right arm",
"Fracture of left arm",
"Fracture of right leg",
"Fracture of left leg",
];
String query = "fracture right";
List<String> terms = query.toLowerCase().split(" ");
List<String> matches = a.where(
(el) {
var elLower = el.toLowerCase();
for (var term in terms) {
if (!elLower.contains(term)) {
return false;
}
}
return true;
},
).toList();
print(matches);
Обратите внимание, что это будет находить совпадения независимо от порядка, вы можете изменить его, чтобы запретить это.
Уже используя этот метод, он не работает должным образом.