mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
mod: 不使用FixedCrossAxisCount,改为MaxCrossAxisExtent
This commit is contained in:
@@ -13,6 +13,7 @@ import 'package:pilipala/common/widgets/video_card_v.dart';
|
||||
import 'package:pilipala/pages/home/index.dart';
|
||||
import 'package:pilipala/pages/main/index.dart';
|
||||
|
||||
import '../../utils/grid.dart';
|
||||
import 'controller.dart';
|
||||
|
||||
class RcmdPage extends StatefulWidget {
|
||||
@@ -88,9 +89,11 @@ class _RcmdPageState extends State<RcmdPage>
|
||||
slivers: [
|
||||
SliverPadding(
|
||||
padding:
|
||||
const EdgeInsets.fromLTRB(0, StyleString.safeSpace, 0, 0),
|
||||
sliver: Obx(() { // 使用Obx来监听数据的变化
|
||||
if (_rcmdController.isLoadingMore && _rcmdController.videoList.isEmpty) {
|
||||
const EdgeInsets.fromLTRB(0, StyleString.safeSpace, 0, 0),
|
||||
sliver: Obx(() {
|
||||
// 使用Obx来监听数据的变化
|
||||
if (_rcmdController.isLoadingMore &&
|
||||
_rcmdController.videoList.isEmpty) {
|
||||
return contentGrid(_rcmdController, []);
|
||||
// 如果正在加载并且列表为空,则显示加载指示器
|
||||
// return const SliverToBoxAdapter(
|
||||
@@ -98,7 +101,8 @@ class _RcmdPageState extends State<RcmdPage>
|
||||
// );
|
||||
} else {
|
||||
// 显示视频列表
|
||||
return contentGrid(_rcmdController, _rcmdController.videoList);
|
||||
return contentGrid(
|
||||
_rcmdController, _rcmdController.videoList);
|
||||
}
|
||||
}),
|
||||
),
|
||||
@@ -120,35 +124,23 @@ class _RcmdPageState extends State<RcmdPage>
|
||||
}
|
||||
|
||||
Widget contentGrid(ctr, videoList) {
|
||||
// double maxWidth = Get.size.width;
|
||||
// int baseWidth = 500;
|
||||
// int step = 300;
|
||||
// int crossAxisCount =
|
||||
// maxWidth > baseWidth ? 2 + ((maxWidth - baseWidth) / step).ceil() : 2;
|
||||
// if (maxWidth < 300) {
|
||||
// crossAxisCount = 1;
|
||||
// }
|
||||
int crossAxisCount = ctr.crossAxisCount.value;
|
||||
double mainAxisExtent = (Get.size.width /
|
||||
crossAxisCount /
|
||||
StyleString.aspectRatio) +
|
||||
(crossAxisCount == 1 ? 68 : MediaQuery.textScalerOf(context).scale(86));
|
||||
|
||||
return SliverGrid(
|
||||
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
||||
gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
|
||||
// 行间距
|
||||
mainAxisSpacing: StyleString.safeSpace,
|
||||
// 列间距
|
||||
crossAxisSpacing: StyleString.safeSpace,
|
||||
// 列数
|
||||
crossAxisCount: crossAxisCount,
|
||||
mainAxisExtent: mainAxisExtent,
|
||||
// 最大宽度
|
||||
maxCrossAxisExtent: Grid.maxRowWidth,
|
||||
mainAxisExtent: Grid.calculateActualWidth(context, Grid.maxRowWidth, StyleString.safeSpace) / StyleString.aspectRatio+
|
||||
MediaQuery.textScalerOf(context).scale(96),
|
||||
),
|
||||
delegate: SliverChildBuilderDelegate(
|
||||
(BuildContext context, int index) {
|
||||
return videoList!.isNotEmpty
|
||||
? VideoCardV(
|
||||
videoItem: videoList[index],
|
||||
crossAxisCount: crossAxisCount,
|
||||
longPress: () {
|
||||
_rcmdController.popupDialog =
|
||||
_createPopupDialog(videoList[index]);
|
||||
|
||||
Reference in New Issue
Block a user