mod: 最热合并到首页

This commit is contained in:
guozhigq
2023-07-11 13:01:51 +08:00
parent bc3ac3c9f6
commit e5a05c22ea
16 changed files with 405 additions and 272 deletions

View File

@ -1,77 +1,42 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:hive/hive.dart';
import 'package:pilipala/http/video.dart';
import 'package:pilipala/models/model_rec_video_item.dart';
import 'package:pilipala/utils/storage.dart';
import 'package:pilipala/pages/hot/index.dart';
import 'package:pilipala/pages/rcmd/index.dart';
class HomeController extends GetxController {
final ScrollController scrollController = ScrollController();
int count = 12;
int _currentPage = 1;
int crossAxisCount = 2;
RxList<RecVideoItemModel> videoList = [RecVideoItemModel()].obs;
bool isLoadingMore = false;
class HomeController extends GetxController with GetTickerProviderStateMixin {
bool flag = false;
OverlayEntry? popupDialog;
Box recVideo = GStrorage.recVideo;
List tabs = [
{'label': '直播', 'type': 'live'},
{'label': '推荐', 'type': 'rcm'},
{'label': '热门', 'type': 'hot'},
];
int initialIndex = 1;
late TabController tabController;
List ctrList = [
'',
Get.find<RcmdController>,
Get.find<HotController>,
];
@override
void onInit() {
super.onInit();
if (recVideo.get('cacheList') != null &&
recVideo.get('cacheList').isNotEmpty) {
List<RecVideoItemModel> list = [];
for (var i in recVideo.get('cacheList')) {
list.add(i);
}
videoList.value = list;
}
}
// 获取推荐
Future queryRcmdFeed(type) async {
var res = await VideoHttp.rcmdVideoList(
ps: count,
freshIdx: _currentPage,
tabController = TabController(
initialIndex: initialIndex,
length: tabs.length,
vsync: this,
);
if (res['status']) {
if (type == 'init') {
if (videoList.length > 1) {
videoList.addAll(res['data']);
} else {
videoList.value = res['data'];
}
} else if (type == 'onRefresh') {
videoList.insertAll(0, res['data']);
} else if (type == 'onLoad') {
videoList.addAll(res['data']);
}
recVideo.put('cacheList', res['data']);
_currentPage += 1;
}
isLoadingMore = false;
return res;
}
// 下拉刷新
Future onRefresh() async {
queryRcmdFeed('onRefresh');
void onRefresh() {
int index = tabController.index;
var ctr = ctrList[index];
ctr().onRefresh();
}
// 上拉加载
Future onLoad() async {
queryRcmdFeed('onLoad');
}
// 返回顶部并刷新
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);
}
void animateToTop() {
int index = tabController.index;
var ctr = ctrList[index];
ctr().animateToTop();
}
}