Merge pull request #598 from luckyray-fan/feat-search-use-lower

feat: 本地收藏搜索支持转小写匹配
This commit is contained in:
ynyx631
2025-11-01 13:29:05 +08:00
committed by GitHub

View File

@@ -30,6 +30,7 @@ class _LocalFavoritesPageState extends State<_LocalFavoritesPage> {
late List<String> added = []; late List<String> added = [];
String keyword = ""; String keyword = "";
bool searchHasUpper = false;
bool searchMode = false; bool searchMode = false;
@@ -123,23 +124,23 @@ class _LocalFavoritesPageState extends State<_LocalFavoritesPage> {
var list = keyword.split(" "); var list = keyword.split(" ");
for (var k in list) { for (var k in list) {
if (k.isEmpty) continue; if (k.isEmpty) continue;
if (comic.title.contains(k)) { if (checkKeyWordMatch(k, comic.title, false)) {
continue; continue;
} else if (comic.subtitle != null && comic.subtitle!.contains(k)) { } else if (comic.subtitle != null && checkKeyWordMatch(k, comic.subtitle!, false)) {
continue; continue;
} else if (comic.tags.any((tag) { } else if (comic.tags.any((tag) {
if (tag == k) { if (checkKeyWordMatch(k, tag, true)) {
return true; return true;
} else if (tag.contains(':') && tag.split(':')[1] == k) { } else if (tag.contains(':') && checkKeyWordMatch(k, tag.split(':')[1], true)) {
return true; return true;
} else if (App.locale.languageCode != 'en' && } else if (App.locale.languageCode != 'en' &&
tag.translateTagsToCN == k) { checkKeyWordMatch(k, tag.translateTagsToCN, true)) {
return true; return true;
} }
return false; return false;
})) { })) {
continue; continue;
} else if (comic.author == k) { } else if (checkKeyWordMatch(k, comic.author, true)) {
continue; continue;
} }
return false; return false;
@@ -147,6 +148,17 @@ class _LocalFavoritesPageState extends State<_LocalFavoritesPage> {
return true; return true;
} }
bool checkKeyWordMatch(String keyword, String compare, bool needEqual) {
String temp = compare;
// 没有大写的话, 就转成小写比较, 避免搜索需要注意大小写
if (!searchHasUpper) {
temp = temp.toLowerCase();
}
if (needEqual) {
return keyword == temp;
}
return temp.contains(keyword);
}
// Convert keyword to traditional Chinese to match comics // Convert keyword to traditional Chinese to match comics
bool matchKeywordT(String keyword, FavoriteItem comic) { bool matchKeywordT(String keyword, FavoriteItem comic) {
if (!OpenCC.hasChineseSimplified(keyword)) { if (!OpenCC.hasChineseSimplified(keyword)) {
@@ -164,7 +176,6 @@ class _LocalFavoritesPageState extends State<_LocalFavoritesPage> {
keyword = OpenCC.traditionalToSimplified(keyword); keyword = OpenCC.traditionalToSimplified(keyword);
return matchKeyword(keyword, comic); return matchKeyword(keyword, comic);
} }
@override @override
void initState() { void initState() {
readFilterSelect = appdata.implicitData["local_favorites_read_filter"] ?? readFilterSelect = appdata.implicitData["local_favorites_read_filter"] ??
@@ -613,6 +624,7 @@ class _LocalFavoritesPageState extends State<_LocalFavoritesPage> {
), ),
onChanged: (v) { onChanged: (v) {
keyword = v; keyword = v;
searchHasUpper = keyword.contains(RegExp(r'[A-Z]'));
updateSearchResult(); updateSearchResult();
}, },
).paddingBottom(8).paddingRight(8), ).paddingBottom(8).paddingRight(8),