Трепещущий поиск контактов на иврите (слева направо) с пробелами не работает

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

Наслаждайтесь! 🙂