mod: 新增推荐过滤器,回退model转换修改,移除不必要的futureBuilder
This commit is contained in:
@ -55,12 +55,13 @@ class RcmdController extends GetxController {
|
||||
}
|
||||
late final Map<String,dynamic> res;
|
||||
switch (defaultRcmdType) {
|
||||
case 'app': case 'notLogin':
|
||||
res = await VideoHttp.rcmdVideoListApp(
|
||||
loginStatus: defaultRcmdType != 'notLogin',
|
||||
freshIdx: _currentPage,
|
||||
);
|
||||
break;
|
||||
case 'app':
|
||||
case 'notLogin':
|
||||
res = await VideoHttp.rcmdVideoListApp(
|
||||
loginStatus: defaultRcmdType != 'notLogin',
|
||||
freshIdx: _currentPage,
|
||||
);
|
||||
break;
|
||||
default: //'web'
|
||||
res = await VideoHttp.rcmdVideoList(
|
||||
freshIdx: _currentPage,
|
||||
@ -83,10 +84,16 @@ class RcmdController extends GetxController {
|
||||
} else if (type == 'onLoad') {
|
||||
videoList.addAll(res['data']);
|
||||
}
|
||||
// 目前仅支持app端系列保存缓存
|
||||
if (defaultRcmdType != 'web') {
|
||||
recVideo.put('cacheList', res['data']);
|
||||
}
|
||||
_currentPage += 1;
|
||||
// 若videoList数量太小,可能会影响翻页,此时再次请求
|
||||
// 为避免请求到的数据太少时还在反复请求,要求本次返回数据大于1条才触发
|
||||
if (res['data'].length > 1 && videoList.length < 10){
|
||||
queryRcmdFeed('onLoad');
|
||||
}
|
||||
} else {
|
||||
Get.snackbar('提示', res['msg']);
|
||||
}
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:easy_debounce/easy_throttle.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
@ -8,7 +7,7 @@ import 'package:get/get.dart';
|
||||
import 'package:pilipala/common/constants.dart';
|
||||
import 'package:pilipala/common/skeleton/video_card_v.dart';
|
||||
import 'package:pilipala/common/widgets/animated_dialog.dart';
|
||||
import 'package:pilipala/common/widgets/http_error.dart';
|
||||
// import 'package:pilipala/common/widgets/http_error.dart';
|
||||
import 'package:pilipala/common/widgets/overlay_pop.dart';
|
||||
import 'package:pilipala/common/widgets/video_card_v.dart';
|
||||
import 'package:pilipala/pages/home/index.dart';
|
||||
@ -26,7 +25,6 @@ class RcmdPage extends StatefulWidget {
|
||||
class _RcmdPageState extends State<RcmdPage>
|
||||
with AutomaticKeepAliveClientMixin {
|
||||
final RcmdController _rcmdController = Get.put(RcmdController());
|
||||
late Future _futureBuilderFuture;
|
||||
|
||||
@override
|
||||
bool get wantKeepAlive => true;
|
||||
@ -34,7 +32,7 @@ class _RcmdPageState extends State<RcmdPage>
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_futureBuilderFuture = _rcmdController.queryRcmdFeed('init');
|
||||
_rcmdController.queryRcmdFeed('init');
|
||||
ScrollController scrollController = _rcmdController.scrollController;
|
||||
StreamController<bool> mainStream =
|
||||
Get.find<MainController>().bottomBarStream;
|
||||
@ -90,21 +88,21 @@ class _RcmdPageState extends State<RcmdPage>
|
||||
slivers: [
|
||||
SliverPadding(
|
||||
padding:
|
||||
const EdgeInsets.fromLTRB(0, StyleString.safeSpace, 0, 0),
|
||||
sliver: Obx(() {
|
||||
// 使用Obx来监听数据的变化
|
||||
if (_rcmdController.isLoadingMore) {
|
||||
// 如果正在加载,则显示骨架屏
|
||||
const EdgeInsets.fromLTRB(0, StyleString.safeSpace, 0, 0),
|
||||
sliver: Obx(() { // 使用Obx来监听数据的变化
|
||||
if (_rcmdController.isLoadingMore && _rcmdController.videoList.isEmpty) {
|
||||
return contentGrid(_rcmdController, []);
|
||||
// 如果正在加载并且列表为空,则显示加载指示器
|
||||
// return const SliverToBoxAdapter(
|
||||
// child: Center(child: CircularProgressIndicator()),
|
||||
// );
|
||||
} else {
|
||||
// 显示视频列表
|
||||
return contentGrid(
|
||||
_rcmdController,
|
||||
_rcmdController.videoList);
|
||||
return contentGrid(_rcmdController, _rcmdController.videoList);
|
||||
}
|
||||
}),
|
||||
),
|
||||
LoadingMore(ctr: _rcmdController)
|
||||
LoadingMore(ctr: _rcmdController),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user