From bed44382f478734cb5aa25d40a76d164c505241d Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Fri, 22 Nov 2024 14:40:40 +0800 Subject: [PATCH] opt: image view Signed-off-by: bggRGjQaUbCoE --- lib/common/widgets/imageview.dart | 6 ++--- lib/common/widgets/network_img_layer.dart | 27 +++++++++-------------- 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/lib/common/widgets/imageview.dart b/lib/common/widgets/imageview.dart index b1a311ac..baa923d3 100644 --- a/lib/common/widgets/imageview.dart +++ b/lib/common/widgets/imageview.dart @@ -71,12 +71,12 @@ Widget image( ClipRRect( borderRadius: BorderRadius.circular(12), child: NetworkImgLayer( - isLongPic: picArr[index].isLongPic, src: picArr[index].url, width: imageWidth, height: imageHeight, - origAspectRatio: - picArr[index].safeWidth / picArr[index].safeHeight, + isLongPic: () => picArr[index].isLongPic, + callback: () => + picArr[index].safeWidth <= picArr[index].safeHeight, ), ), if (picArr[index].isLongPic) diff --git a/lib/common/widgets/network_img_layer.dart b/lib/common/widgets/network_img_layer.dart index 7eca48b8..4c36645c 100644 --- a/lib/common/widgets/network_img_layer.dart +++ b/lib/common/widgets/network_img_layer.dart @@ -19,12 +19,12 @@ class NetworkImgLayer extends StatelessWidget { this.fadeInDuration, // 图片质量 默认1% this.quality, - this.origAspectRatio, this.semanticsLabel, this.ignoreHeight, this.radius, this.imageBuilder, - this.isLongPic = false, + this.isLongPic, + this.callback, }); final String? src; @@ -34,31 +34,24 @@ class NetworkImgLayer extends StatelessWidget { final Duration? fadeOutDuration; final Duration? fadeInDuration; final int? quality; - final double? origAspectRatio; final String? semanticsLabel; final bool? ignoreHeight; final double? radius; final ImageWidgetBuilder? imageBuilder; - final bool isLongPic; + final Function? isLongPic; + final Function? callback; @override Widget build(BuildContext context) { - final int defaultImgQuality = GlobalData().imgQuality; + late final int defaultImgQuality = GlobalData().imgQuality; final String imageUrl = '${src?.startsWith('//') == true ? 'https:$src' : src}@${quality ?? defaultImgQuality}q.webp'; int? memCacheWidth, memCacheHeight; - if (isLongPic || - width > height || - (origAspectRatio != null && origAspectRatio! > 1)) { + if (callback?.call() == true || width <= height) { memCacheWidth = width.cacheSize(context); - } else if (width < height || - (origAspectRatio != null && origAspectRatio! < 1)) { - memCacheHeight = height.cacheSize(context); } else { - // 不能同时设置,否则会导致图片变形 - memCacheWidth = width.cacheSize(context); - // memCacheHeight = height.cacheSize(context); + memCacheHeight = height.cacheSize(context); } Widget res = src != '' && src != null ? ClipRRect( @@ -80,7 +73,9 @@ class NetworkImgLayer extends StatelessWidget { memCacheWidth: memCacheWidth, memCacheHeight: memCacheHeight, fit: BoxFit.cover, - alignment: Alignment.topCenter, + alignment: isLongPic?.call() == true + ? Alignment.topCenter + : Alignment.center, fadeOutDuration: fadeOutDuration ?? const Duration(milliseconds: 120), fadeInDuration: @@ -126,7 +121,7 @@ class NetworkImgLayer extends StatelessWidget { width: width, height: height, cacheWidth: width.cacheSize(context), - cacheHeight: height.cacheSize(context), + // cacheHeight: height.cacheSize(context), ), ), );