opt: long image view

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2024-11-22 11:37:55 +08:00
parent a61a394048
commit e7016286af
2 changed files with 11 additions and 3 deletions

View File

@@ -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,

View File

@@ -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: