mod: 首页推荐代码

This commit is contained in:
guozhigq
2023-08-18 18:22:20 +08:00
parent 47a3c964c0
commit b55568ef2a
4 changed files with 57 additions and 82 deletions

View File

@ -8,9 +8,8 @@ import 'package:pilipala/utils/storage.dart';
class RcmdController extends GetxController {
final ScrollController scrollController = ScrollController();
int _currentPage = 0;
int crossAxisCount = 2;
RxList<RecVideoItemAppModel> videoList = [RecVideoItemAppModel()].obs;
bool isLoadingMore = false;
RxList<RecVideoItemAppModel> videoList = <RecVideoItemAppModel>[].obs;
bool isLoadingMore = true;
OverlayEntry? popupDialog;
Box recVideo = GStrorage.recVideo;
@ -29,6 +28,9 @@ class RcmdController extends GetxController {
// 获取推荐
Future queryRcmdFeed(type) async {
if (isLoadingMore == false) {
return;
}
if (type == 'onRefresh') {
_currentPage = 0;
}
@ -37,7 +39,7 @@ class RcmdController extends GetxController {
);
if (res['status']) {
if (type == 'init') {
if (videoList.length > 1) {
if (videoList.isNotEmpty) {
videoList.addAll(res['data']);
} else {
videoList.value = res['data'];
@ -56,6 +58,7 @@ class RcmdController extends GetxController {
// 下拉刷新
Future onRefresh() async {
isLoadingMore = true;
queryRcmdFeed('onRefresh');
}

View File

@ -1,4 +1,5 @@
import 'dart:async';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
@ -41,7 +42,9 @@ class _RcmdPageState extends State<RcmdPage>
scrollController.position.maxScrollExtent - 200) {
if (!_rcmdController.isLoadingMore) {
_rcmdController.isLoadingMore = true;
_rcmdController.onLoad();
WidgetsBinding.instance.addPostFrameCallback((_) async {
_rcmdController.onLoad();
});
}
}
@ -74,30 +77,36 @@ class _RcmdPageState extends State<RcmdPage>
controller: _rcmdController.scrollController,
slivers: [
SliverPadding(
// 单列布局 EdgeInsets.zero
padding: _rcmdController.crossAxisCount == 1
? EdgeInsets.zero
: const EdgeInsets.fromLTRB(0, StyleString.safeSpace, 0, 0),
padding:
const EdgeInsets.fromLTRB(0, StyleString.safeSpace, 0, 0),
sliver: FutureBuilder(
future: _futureBuilderFuture,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
Map data = snapshot.data as Map;
if (data['status']) {
return SliverLayoutBuilder(
builder: (context, boxConstraints) {
return Obx(() => contentGrid(
_rcmdController, _rcmdController.videoList));
});
return Platform.isAndroid || Platform.isIOS
? Obx(() => contentGrid(
_rcmdController, _rcmdController.videoList))
: SliverLayoutBuilder(
builder: (context, boxConstraints) {
return Obx(() => contentGrid(
_rcmdController, _rcmdController.videoList));
});
} else {
return HttpError(
errMsg: data['msg'],
fn: () => {},
fn: () {
setState(() {
_futureBuilderFuture =
_rcmdController.queryRcmdFeed('init');
});
},
);
}
} else {
// 缓存数据
if (_rcmdController.videoList.length > 1) {
if (_rcmdController.videoList.isNotEmpty) {
return contentGrid(
_rcmdController, _rcmdController.videoList);
}
@ -118,9 +127,10 @@ class _RcmdPageState extends State<RcmdPage>
OverlayEntry _createPopupDialog(videoItem) {
return OverlayEntry(
builder: (context) => AnimatedDialog(
child: OverlayPop(videoItem: videoItem),
));
builder: (context) => AnimatedDialog(
child: OverlayPop(videoItem: videoItem),
),
);
}
Widget contentGrid(ctr, videoList) {