feat: 增加搜索结果下拉刷新

This commit is contained in:
Zhou Weidong committed 2026-10-22 22:52:50 +08:00
1 parent 281f13a810
commit 6b3d870c93
3 files changed
+75 -21

No files matched your search

+25 -4
View File
@@ -61,6 +61,14 @@ class DiscoverLogic extends ChangeNotifier {
if (query.isNotEmpty) unawaited(_runSearch(query));
}
/// 用当前关键词重新请求第一页;刷新期间保留旧结果。
Future<void> refreshSearch() async {
final query = search.text.trim();
if (query.isEmpty) return;
_searchTimer?.cancel();
await _runSearch(query, preserveResults: true);
}
void _resetSearch() {
_searchTimer?.cancel();
_searchRequest++;
@@ -85,7 +93,7 @@ class DiscoverLogic extends ChangeNotifier {
_searchTimer = Timer(searchDebounce, () => unawaited(_runSearch(query)));
}
Future<void> _runSearch(String query) async {
Future<void> _runSearch(String query, {bool preserveResults = false}) async {
final repository = searchRepository;
if (repository == null) return;
final request = ++_searchRequest;
@@ -101,9 +109,17 @@ class DiscoverLogic extends ChangeNotifier {
if (request != _searchRequest) return;
searchResults = result.list;
} on ApiException catch (exception) {
_applySearchError(request, exception.message);
_applySearchError(
request,
exception.message,
preserveResults: preserveResults,
);
} catch (_) {
_applySearchError(request, 'searchFailed');
_applySearchError(
request,
'searchFailed',
preserveResults: preserveResults,
);
} finally {
if (request == _searchRequest) {
searchLoading = false;
@@ -112,8 +128,13 @@ class DiscoverLogic extends ChangeNotifier {
}
}
void _applySearchError(int request, String message) {
void _applySearchError(
int request,
String message, {
bool preserveResults = false,
}) {
if (request != _searchRequest) return;
if (preserveResults && searchResults.isNotEmpty) return;
searchError = message;
searchResults = const [];
}