feat: 搜索建议

This commit is contained in:
guozhigq
2023-06-20 14:23:18 +08:00
parent 335718b3a0
commit 7e7892aab2
13 changed files with 301 additions and 83 deletions

View File

@ -1,24 +1,21 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get/get_rx/src/rx_workers/utils/debouncer.dart';
import 'package:hive/hive.dart';
import 'package:pilipala/http/search.dart';
import 'package:pilipala/models/search/hot.dart';
import 'package:pilipala/models/search/suggest.dart';
import 'package:pilipala/utils/storage.dart';
class SearchController extends GetxController {
final FocusNode searchFocusNode = FocusNode();
RxString searchKeyWord = ''.obs;
Rx<TextEditingController> controller = TextEditingController().obs;
List tabs = [
{'label': '综合', 'id': ''},
{'label': '视频', 'id': ''},
{'label': '番剧', 'id': ''},
{'label': '直播', 'id': ''},
{'label': '专栏', 'id': ''},
{'label': '用户', 'id': ''}
];
List<HotSearchItem> hotSearchList = [];
Box hotKeyword = GStrorage.hotKeyword;
RxList<SearchSuggestItem> searchSuggestList = [SearchSuggestItem()].obs;
final _debouncer =
Debouncer(delay: const Duration(milliseconds: 200)); // 设置延迟时间
@override
void onInit() {
@ -39,15 +36,26 @@ class SearchController extends GetxController {
void onChange(value) {
searchKeyWord.value = value;
if (value == '') {
searchSuggestList.value = [];
return;
}
_debouncer.call(() => querySearchSuggest(value));
}
void onClear() {
controller.value.clear();
searchKeyWord.value = '';
searchSuggestList.value = [];
}
void submit(value) {
searchKeyWord.value = value;
// 搜索
void submit() {
// ignore: unrelated_type_equality_checks
if (searchKeyWord == '') {
return;
}
Get.toNamed('/searchResult', parameters: {'keyword': searchKeyWord.value});
}
// 获取热搜关键词
@ -60,12 +68,19 @@ class SearchController extends GetxController {
// 点击热搜关键词
void onClickKeyword(String keyword) {
print(keyword);
searchKeyWord.value = keyword;
controller.value.text = keyword;
// 移动光标
controller.value.selection = TextSelection.fromPosition(
TextPosition(offset: controller.value.text.length),
);
submit();
}
Future querySearchSuggest(String value) async {
var result = await SearchHttp.searchSuggest(term: value);
if (result['status']) {
searchSuggestList.value = result['data'].tag;
}
}
}