Skip to content

Commit

Permalink
feat:#19 추천 검색어 api 연결
Browse files Browse the repository at this point in the history
data 길이 상관없이 priority 상위 10개만 반환
  • Loading branch information
kimwest00 committed Oct 17, 2023
1 parent 869f7b4 commit 709a7f6
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,21 @@ import 'package:match/util/method/get_storage.dart';
import '../../../model/enum/search_statu.dart';
import '../../../model/search/search.dart';
import '../../../model/today_project/today_project.dart';
import '../../../provider/api/search_api.dart';
import '../../../util/const/style/global_logger.dart';

class DonationSearchController extends GetxController {
//검색 필드 controller
Rx<TextEditingController> searchTextController = TextEditingController().obs;
//최근 검색어 list
RxList<RecentSearch> recentSearchList = <RecentSearch>[].obs;


//최근 검색어 위젯 활성화 여부
Rx<SEARCH_STATUS> searchStatus = SEARCH_STATUS.INIT.obs;
RxList<TodayProject> projectList = <TodayProject>[].obs;

///* 추천 검색어 리스트
RxList<String> recommendSearchList = <String>[].obs;

///* 아래 함수에서 사용하는 1초를 측정하는 Timer
Timer? _timer;

Expand Down Expand Up @@ -63,8 +66,7 @@ class DonationSearchController extends GetxController {
@override
void onInit() async {
super.onInit();
recentSearchList.value =
await GetStorageUtil.getRecentSearches(StorageKey.PROJECT_SEARCH);
await addTimerListenr();
recommendSearchList.assignAll(await SearchApi.getRecommendSearchList());
}
}
44 changes: 28 additions & 16 deletions lib/modules/donation_search/view/donation_search_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ class DonationSearchScreen extends GetView<DonationSearchController> {
textStatus: controller.searchStatus,
suffixOnTap: () async {},
onSubmitted: (value) async {
//TODO: add search api
// controller.projectList.addAll(
// await SearchApi.getSearchResult(content: value));
},
Expand Down Expand Up @@ -75,8 +76,8 @@ class DonationSearchScreen extends GetView<DonationSearchController> {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
recentSearchList(startIdx: 1),
recentSearchList(startIdx: 6),
recentSearchList(startIdx: 1,keywords: controller.recommendSearchList.sublist(0,5)),
recentSearchList(startIdx: 6,keywords: controller.recommendSearchList.sublist(5,10)),
],
),
],
Expand Down Expand Up @@ -132,31 +133,42 @@ class DonationSearchScreen extends GetView<DonationSearchController> {
));
}

Widget recentSearchList({required int startIdx}) {
Widget recentSearchList({required int startIdx, required List<String> keywords }) {
return Wrap(
direction: Axis.vertical,
spacing: 12.h,
children: List.generate(5, (index) {
return _recentSearchItem(
priority: startIdx + index,
//임시 하드코딩
keyword: "후원명, 후원사");
keyword: keywords[index]);
}));
}

Widget _recentSearchItem({required int priority, required String keyword}) {
return Row(children: [
Text(
"${priority}",
style: AppTextStyles.T1Bold13.copyWith(color: AppColors.primary500),
),
SizedBox(
width: 19.w,
),
Text(
keyword,
style: AppTextStyles.S1SemiBold14,
return GestureDetector(
onTap: (){
controller.searchTextController.value.text = keyword;
//TODO: add search api
controller.searchStatus.value = SEARCH_STATUS.SEARCH;
},
child: SizedBox(
width: 120.w,
child: Row(children: [
Text(
"${priority}",
style: AppTextStyles.T1Bold13.copyWith(color: AppColors.primary500),
),
SizedBox(
width: 19.w,
),
Text(
keyword,
style: AppTextStyles.S1SemiBold14,
overflow: TextOverflow.ellipsis,
),
]),
),
]);
);
}
}
32 changes: 18 additions & 14 deletions lib/provider/api/search_api.dart
Original file line number Diff line number Diff line change
@@ -1,25 +1,29 @@
import 'package:dio/dio.dart';
import 'package:match/model/project/project.dart';
import 'package:match/model/recommend_search.dart/recommend_search.dart';
import 'package:match/provider/api/util/dio_services.dart';
import 'package:match/provider/api/util/global_api_field.dart';
import '../../model/api/pagination.dart';
import '../../util/const/style/global_logger.dart';

class SearchApi {
///<h2>3-5 API;프로젝트 리스트</h2>
//TODO: pagination 적용
static Future<List<Project>> getSearchResult({
int page = 0,
int size = 10,
String? content,
}) async {
///<h2>9-1 API | 검색탭 - 프로젝트 검색전 추천 검색어</h2>
///* pagination X, size가 10인 List<String> 반환
static Future<List<String>> getRecommendSearchList() async {
try {
Response response = await DioServices().to().get("/projects/search",
queryParameters: {"page": 0, "size": 10, "content": content});
// logger.d(response.data);
return List.generate(
response.data[RESULT][CONTENTS].length,
(index) => Project.fromJson(response.data[RESULT][CONTENTS][index]),
);
logger.d("api호출 성공");

Response response = await DioServices().to().get("/keywords");

var tmpList = List.generate(10, (index) => "");

response.data[RESULT].forEach((result) {
final keyword = RecommendSearch.fromJson(result);
if (1 <= keyword.priority && keyword.priority <= 10) {
tmpList[keyword.priority-1] = keyword.keyword;
}
});
return tmpList;
} catch (e) {
logger.e(e.toString());
return [];
Expand Down

0 comments on commit 709a7f6

Please sign in to comment.