mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-17 07:36:14 +08:00
opt: long image view
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -16,9 +16,11 @@ class ImageModel {
|
|||||||
dynamic width;
|
dynamic width;
|
||||||
dynamic height;
|
dynamic height;
|
||||||
String url;
|
String url;
|
||||||
|
bool? _isLongPic;
|
||||||
|
|
||||||
dynamic get safeWidth => width ?? 1;
|
dynamic get safeWidth => width ?? 1;
|
||||||
dynamic get safeHeight => height ?? 1;
|
dynamic get safeHeight => height ?? 1;
|
||||||
|
bool get isLongPic => _isLongPic ??= (safeHeight / safeWidth) > (22 / 9);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget image(
|
Widget image(
|
||||||
@@ -37,7 +39,7 @@ Widget image(
|
|||||||
? maxWidth
|
? maxWidth
|
||||||
: (ratioWH >= 1 || (height > width && ratioHW < 1.5))
|
: (ratioWH >= 1 || (height > width && ratioHW < 1.5))
|
||||||
? 2 * imageWidth
|
? 2 * imageWidth
|
||||||
: imageWidth;
|
: 1.5 * imageWidth;
|
||||||
imageHeight = imageWidth * min(ratioHW, maxRatio);
|
imageHeight = imageWidth * min(ratioHW, maxRatio);
|
||||||
} else if (picArr.length == 2) {
|
} else if (picArr.length == 2) {
|
||||||
imageWidth = imageHeight = 2 * imageWidth;
|
imageWidth = imageHeight = 2 * imageWidth;
|
||||||
@@ -69,6 +71,7 @@ Widget image(
|
|||||||
ClipRRect(
|
ClipRRect(
|
||||||
borderRadius: BorderRadius.circular(12),
|
borderRadius: BorderRadius.circular(12),
|
||||||
child: NetworkImgLayer(
|
child: NetworkImgLayer(
|
||||||
|
isLongPic: picArr[index].isLongPic,
|
||||||
src: picArr[index].url,
|
src: picArr[index].url,
|
||||||
width: imageWidth,
|
width: imageWidth,
|
||||||
height: imageHeight,
|
height: imageHeight,
|
||||||
@@ -76,7 +79,7 @@ Widget image(
|
|||||||
picArr[index].safeWidth / picArr[index].safeHeight,
|
picArr[index].safeWidth / picArr[index].safeHeight,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
if (picArr[index].safeHeight / picArr[index].safeWidth > 22 / 9)
|
if (picArr[index].isLongPic)
|
||||||
const PBadge(
|
const PBadge(
|
||||||
text: '长图',
|
text: '长图',
|
||||||
right: 8,
|
right: 8,
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ class NetworkImgLayer extends StatelessWidget {
|
|||||||
this.ignoreHeight,
|
this.ignoreHeight,
|
||||||
this.radius,
|
this.radius,
|
||||||
this.imageBuilder,
|
this.imageBuilder,
|
||||||
|
this.isLongPic = false,
|
||||||
});
|
});
|
||||||
|
|
||||||
final String? src;
|
final String? src;
|
||||||
@@ -38,6 +39,7 @@ class NetworkImgLayer extends StatelessWidget {
|
|||||||
final bool? ignoreHeight;
|
final bool? ignoreHeight;
|
||||||
final double? radius;
|
final double? radius;
|
||||||
final ImageWidgetBuilder? imageBuilder;
|
final ImageWidgetBuilder? imageBuilder;
|
||||||
|
final bool isLongPic;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@@ -46,7 +48,9 @@ class NetworkImgLayer extends StatelessWidget {
|
|||||||
'${src?.startsWith('//') == true ? 'https:$src' : src}@${quality ?? defaultImgQuality}q.webp';
|
'${src?.startsWith('//') == true ? 'https:$src' : src}@${quality ?? defaultImgQuality}q.webp';
|
||||||
int? memCacheWidth, memCacheHeight;
|
int? memCacheWidth, memCacheHeight;
|
||||||
|
|
||||||
if (width > height || (origAspectRatio != null && origAspectRatio! > 1)) {
|
if (isLongPic ||
|
||||||
|
width > height ||
|
||||||
|
(origAspectRatio != null && origAspectRatio! > 1)) {
|
||||||
memCacheWidth = width.cacheSize(context);
|
memCacheWidth = width.cacheSize(context);
|
||||||
} else if (width < height ||
|
} else if (width < height ||
|
||||||
(origAspectRatio != null && origAspectRatio! < 1)) {
|
(origAspectRatio != null && origAspectRatio! < 1)) {
|
||||||
@@ -76,6 +80,7 @@ class NetworkImgLayer extends StatelessWidget {
|
|||||||
memCacheWidth: memCacheWidth,
|
memCacheWidth: memCacheWidth,
|
||||||
memCacheHeight: memCacheHeight,
|
memCacheHeight: memCacheHeight,
|
||||||
fit: BoxFit.cover,
|
fit: BoxFit.cover,
|
||||||
|
alignment: Alignment.topCenter,
|
||||||
fadeOutDuration:
|
fadeOutDuration:
|
||||||
fadeOutDuration ?? const Duration(milliseconds: 120),
|
fadeOutDuration ?? const Duration(milliseconds: 120),
|
||||||
fadeInDuration:
|
fadeInDuration:
|
||||||
|
|||||||
Reference in New Issue
Block a user