Поиск данных в сембасте как заглавными, так и строчными буквами - PullRequest
0 голосов
/ 17 июня 2020

Я использую пакет sembast для локального хранения данных для приложения Flutter. Когда я просматриваю локальные данные, я хочу получать результаты независимо от того, написаны ли буквы заглавными или маленькими. Мой текущий код чувствителен к заглавным и строчным буквам.

  Future searchFoodByField(String fieldName, String searchItem) async {
var finder = Finder(filter: Filter.matches(fieldName, searchItem));
final recordSnapshots = await _foodStore.find(
  await _db,
  finder: finder,
);
return recordSnapshots.map((snapshot) {
  final food = Food.fromMap(snapshot.value);
  food.foodId = snapshot.key;
  return food;
}).toList();
}

Как его можно изменить, чтобы получить желаемый результат?

1 Ответ

0 голосов
/ 18 июня 2020

Полагаю, вы хотите найти точное слово. Для неанглийского sh языка вы также можете удалить акцент. (Здесь может помочь пакет diacriti c).

// Using a regular expression matching the exact word (no case)
var filter = Filter.matchesRegExp(
    fieldName, RegExp('^$searchItem\$', caseSensitive: false));

Вы также можете использовать настраиваемый фильтр для выполнения любой фильтрации по вашему желанию:

// Using a custom filter exact word (converting everything to lowercase)
searchItem = searchItem.toLowerCase();
filter = Filter.custom((snapshot) {
  var value = snapshot[fieldName] as String;
  return value?.toLowerCase() == searchItem;
});
...