opt: unify trending api & feat: search recommend (#694)

* opt: unify trending api

* opt: disable icon

* feat: search recommend

* mod: recommend api
This commit is contained in:
My-Responsitories
2025-04-16 12:16:45 +08:00
committed by GitHub
parent 3638d65008
commit f0e3b776bb
18 changed files with 285 additions and 452 deletions

View File

@@ -766,4 +766,7 @@ class Api {
static const String searchTrending = '/x/v2/search/trending/ranking';
static const String setTopDyn = '/x/dynamic/feed/space/set_top';
static const String searchRecommend =
'${HttpString.appBaseUrl}/x/v2/search/recommend';
}

View File

@@ -7,9 +7,9 @@ abstract class LoadingState<T> {
}
class Loading extends LoadingState<Never> {
Loading._internal();
const Loading._internal();
static final Loading _instance = Loading._internal();
static const Loading _instance = Loading._internal();
factory Loading() => _instance;
}

View File

@@ -6,33 +6,12 @@ import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:PiliPlus/http/loading_state.dart';
import '../models/bangumi/info.dart';
import '../models/common/search_type.dart';
import '../models/search/hot.dart';
import '../models/search/result.dart';
import '../models/search/suggest.dart';
import '../utils/storage.dart';
import 'index.dart';
class SearchHttp {
static Future hotSearchList() async {
var res = await Request().get(Api.hotSearchList);
if (res.data is String) {
Map<String, dynamic> resultMap = json.decode(res.data);
if (resultMap['code'] == 0) {
return {
'status': true,
'data': HotSearchModel.fromJson(resultMap),
};
}
} else if (res.data is Map<String, dynamic> && res.data['code'] == 0) {
return {
'status': true,
'data': HotSearchModel.fromJson(res.data),
};
}
return {'status': false, 'msg': '请求错误'};
}
// 获取搜索建议
static Future searchSuggest({required term}) async {
var res = await Request().get(Api.searchSuggest,
@@ -211,7 +190,7 @@ class SearchHttp {
static Future<LoadingState<TrendingData>> searchTrending(
{int limit = 30}) async {
final dynamic res = await Request().get(
final res = await Request().get(
Api.searchTrending,
queryParameters: {
'limit': limit,
@@ -223,4 +202,17 @@ class SearchHttp {
return LoadingState.error(res.data['message']);
}
}
static Future<LoadingState<SearchKeywordData>> searchRecommend() async {
final res = await Request().get(Api.searchRecommend, queryParameters: {
'build': '8350200',
'c_locale': 'zh_CN',
'mobi_app': 'android',
'platform': 'android',
's_locale': 'zh_CN',
});
return res.data['code'] == 0
? LoadingState.success(SearchKeywordData.fromJson(res.data['data']))
: LoadingState.error(res.data['message']);
}
}