44 lines
1.3 KiB
Dart
44 lines
1.3 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:pilipala/http/search.dart';
|
|
import 'package:pilipala/models/common/search_type.dart';
|
|
|
|
class SearchPanelController extends GetxController {
|
|
SearchPanelController({this.keyword, this.searchType});
|
|
ScrollController scrollController = ScrollController();
|
|
String? keyword;
|
|
SearchType? searchType;
|
|
RxInt page = 1.obs;
|
|
RxList resultList = [].obs;
|
|
|
|
Future onSearch({type = 'init'}) async {
|
|
var result = await SearchHttp.searchByType(
|
|
searchType: searchType!, keyword: keyword!, page: page.value);
|
|
if (result['status']) {
|
|
if (type == 'init' || type == 'onLoad') {
|
|
page.value++;
|
|
resultList.addAll(result['data'].list);
|
|
} else if (type == 'onRefresh') {
|
|
resultList.value = result['data'].list;
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
Future onRefresh() async {
|
|
page.value = 1;
|
|
onSearch(type: 'onRefresh');
|
|
}
|
|
|
|
// 返回顶部并刷新
|
|
void animateToTop() async {
|
|
if (scrollController.offset >=
|
|
MediaQuery.of(Get.context!).size.height * 5) {
|
|
scrollController.jumpTo(0);
|
|
} else {
|
|
await scrollController.animateTo(0,
|
|
duration: const Duration(milliseconds: 500), curve: Curves.easeInOut);
|
|
}
|
|
}
|
|
}
|