Signed-off-by: dom <githubaccount56556@proton.me>
This commit is contained in:
dom
2026-05-14 12:13:17 +08:00
parent 025775d231
commit 09be4f45f0
78 changed files with 428 additions and 849 deletions

View File

@@ -1,13 +1,12 @@
import 'dart:math';
import 'package:PiliPlus/common/skeleton/video_card_h.dart';
import 'package:PiliPlus/common/style.dart';
import 'package:PiliPlus/utils/storage_pref.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
mixin GridMixin<T extends StatefulWidget> on State<T> {
late final gridDelegate = Grid.videoCardHDelegate(context);
mixin GridMixin {
late final gridDelegate = Grid.videoCardHDelegate();
Widget get gridSkeleton => SliverGrid.builder(
gridDelegate: gridDelegate,
@@ -19,15 +18,12 @@ mixin GridMixin<T extends StatefulWidget> on State<T> {
abstract final class Grid {
static final double smallCardWidth = Pref.smallCardWidth;
static SliverGridDelegateWithExtentAndRatio videoCardHDelegate(
BuildContext context, {
double minHeight = 90,
}) => SliverGridDelegateWithExtentAndRatio(
mainAxisSpacing: 2,
maxCrossAxisExtent: Grid.smallCardWidth * 2,
childAspectRatio: Style.aspectRatio * 2.2,
minHeight: MediaQuery.textScalerOf(context).scale(minHeight),
);
static SliverGridDelegateWithMaxCrossAxisExtent videoCardHDelegate() =>
SliverGridDelegateWithMaxCrossAxisExtent(
mainAxisSpacing: 2,
mainAxisExtent: 110,
maxCrossAxisExtent: Grid.smallCardWidth * 2,
);
}
class SliverGridDelegateWithExtentAndRatio extends SliverGridDelegate {
@@ -43,14 +39,10 @@ class SliverGridDelegateWithExtentAndRatio extends SliverGridDelegate {
this.crossAxisSpacing = 0.0,
this.childAspectRatio = 1.0,
this.mainAxisExtent = 0.0,
this.minHeight = 0.0,
}) : assert(maxCrossAxisExtent > 0),
assert(mainAxisSpacing >= 0),
assert(crossAxisSpacing >= 0),
assert(childAspectRatio > 0),
assert(minHeight >= 0);
final double minHeight;
assert(childAspectRatio > 0);
/// The maximum extent of tiles in the cross axis.
///
@@ -111,10 +103,8 @@ class SliverGridDelegateWithExtentAndRatio extends SliverGridDelegate {
constraints.crossAxisExtent - crossAxisSpacing * (crossAxisCount - 1),
);
final double childCrossAxisExtent = usableCrossAxisExtent / crossAxisCount;
final double childMainAxisExtent = max(
minHeight,
childCrossAxisExtent / childAspectRatio + mainAxisExtent,
);
final double childMainAxisExtent =
childCrossAxisExtent / childAspectRatio + mainAxisExtent;
return layoutCache = SliverGridRegularTileLayout(
crossAxisCount: crossAxisCount,
mainAxisStride: childMainAxisExtent + mainAxisSpacing,