#flutter #dart
#трепетание #dart
Вопрос:
Я пытаюсь выполнить поиск контактов, сохраненных на моем местном языке (не на английском). Например, у меня есть 2 слова в моем имени. Допустим, a b Когда я ищу «a» (первое слово), он работает нормально, но когда я добавлю «пробел», чтобы написать другое слово, список контактов вернется пустым, даже после каждого слова пробела он получит пустой список. Вот пример использования кода:
ContactsService.getContacts(
withThumbnails: false,
photoHighResolution: false,
query: a b);
Примечание: «a b» я использовал в качестве примера. В моем случае это мое слово на иврите.
Скриншот добавления первого слова:
Скриншот добавления пробела после одного слова:
Скриншот добавления буквенного пробела:
Комментарии:
1. Я сталкиваюсь с той же проблемой.
Ответ №1:
При использовании интервала, например, на иврите, добавляется символ Юникода u200f
.
Чтобы проверить, содержит ли ваша строка u200f
, просто скопируйте строку из своего run terminal
в dartpad. Как вы можете видеть, рядом с пробелом есть странная точка.
В этом случае все, что вам нужно сделать, это удалить символ Юникода с помощью приведенного выше регулярного выражения:
var searchName = val.replaceAll(new RegExp(r'[u200f]'), "");
Пример использования при поиске контактов по имени:
List<Contact> tempContactList = List<Contact>();
contactList.forEach((contact) {
if (contact.displayName != null){
var searchName = val.replaceAll(new RegExp(r'[u200f]'), "");
if(contact.displayName.contains(searchName)){
tempContactList.add(contact);
}
}
});
Наслаждайтесь! 🙂