diff --git a/lib/pages/search/search_view.dart b/lib/pages/search/search_view.dart index f586df94..bef6476a 100644 --- a/lib/pages/search/search_view.dart +++ b/lib/pages/search/search_view.dart @@ -6,6 +6,7 @@ import 'package:matrix/matrix.dart'; import 'package:vrouter/vrouter.dart'; import 'package:fluffychat/pages/chat_list/chat_list_item.dart'; +import 'package:fluffychat/utils/string_extension.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/contacts_list.dart'; import 'package:fluffychat/widgets/default_app_bar_search_field.dart'; @@ -68,9 +69,8 @@ class SearchView extends StatelessWidget { rooms.removeWhere( (room) => room.lastEvent == null || - !room.displayname - .toLowerCase() - .contains(controller.controller.text.toLowerCase()), + !room.displayname.toLowerCase().removeDiacritics().contains( + controller.controller.text.toLowerCase().removeDiacritics()), ); const tabCount = 3; return DefaultTabController( diff --git a/lib/utils/string_extension.dart b/lib/utils/string_extension.dart new file mode 100644 index 00000000..3c77ed4a --- /dev/null +++ b/lib/utils/string_extension.dart @@ -0,0 +1,15 @@ +extension StringCasingExtension on String { + String removeDiacritics() { + const withDia = + 'ÀÁÂÃÄÅàáâãäåÒÓÔÕÕÖØòóôõöøÈÉÊËèéêëðÇçÐÌÍÎÏìíîïÙÚÛÜùúûüÑñŠšŸÿýŽž'; + const withoutDia = + 'AAAAAAaaaaaaOOOOOOOooooooEEEEeeeeeCcDIIIIiiiiUUUUuuuuNnSsYyyZz'; + + String str = this; + for (int i = 0; i < withDia.length; i++) { + str = str.replaceAll(withDia[i], withoutDia[i]); + } + + return str; + } +}