feat: 增加搜索结果下拉刷新
This commit is contained in:
1 parent
281f13a810
commit
6b3d870c93
3 files changed
+75
-21
No files matched your search
@@ -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 [];
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user