diff --git a/lib/common/widgets/flutter/text_field/controller.dart b/lib/common/widgets/flutter/text_field/controller.dart index d2becc817..6e72d3952 100644 --- a/lib/common/widgets/flutter/text_field/controller.dart +++ b/lib/common/widgets/flutter/text_field/controller.dart @@ -787,7 +787,7 @@ class RichTextEditingController extends TextEditingController { width: 22, // emote.width, height: 22, // emote.height, type: ImageType.emote, - boxFit: BoxFit.contain, + fit: BoxFit.contain, ), ), ); diff --git a/lib/common/widgets/image/custom_grid_view.dart b/lib/common/widgets/image/custom_grid_view.dart index 10b9a989d..a7e9bc519 100644 --- a/lib/common/widgets/image/custom_grid_view.dart +++ b/lib/common/widgets/image/custom_grid_view.dart @@ -177,13 +177,11 @@ class CustomGridView extends StatelessWidget { context, ).colorScheme.onInverseSurface.withValues(alpha: 0.4), ), - child: Center( - child: Image.asset( - 'assets/images/loading.png', - width: imageWidth, - height: imageHeight, - cacheWidth: imageWidth.cacheSize(context), - ), + child: Image.asset( + 'assets/images/loading.png', + width: imageWidth, + height: imageHeight, + cacheWidth: imageWidth.cacheSize(context), ), ); @@ -216,11 +214,11 @@ class CustomGridView extends StatelessWidget { ClipRRect( borderRadius: radius, child: NetworkImgLayer( - radius: 0, + type: .emote, src: item.url, width: imageWidth, height: imageHeight, - isLongPic: item.isLongPic, + alignment: item.isLongPic ? .topCenter : .center, forceUseCacheWidth: item.width <= item.height, getPlaceHolder: () => placeHolder, ), diff --git a/lib/common/widgets/image/network_img_layer.dart b/lib/common/widgets/image/network_img_layer.dart index 2088461c0..cabc92b06 100644 --- a/lib/common/widgets/image/network_img_layer.dart +++ b/lib/common/widgets/image/network_img_layer.dart @@ -12,68 +12,57 @@ class NetworkImgLayer extends StatelessWidget { required this.src, required this.width, this.height, - this.type = ImageType.def, - this.fadeOutDuration, - this.fadeInDuration, - // 图片质量 默认1% + this.type = .def, + this.fadeOutDuration = const Duration(milliseconds: 120), + this.fadeInDuration = const Duration(milliseconds: 120), this.quality, - this.semanticsLabel, - this.radius, - this.isLongPic = false, + this.borderRadius = StyleString.mdRadius, this.forceUseCacheWidth = false, this.getPlaceHolder, - this.boxFit, + this.fit = .cover, + this.alignment = .center, }); final String? src; final double width; final double? height; final ImageType type; - final Duration? fadeOutDuration; - final Duration? fadeInDuration; + final Duration fadeOutDuration; + final Duration fadeInDuration; final int? quality; - final String? semanticsLabel; - final double? radius; - final bool isLongPic; + final BorderRadius borderRadius; final bool forceUseCacheWidth; - final Widget Function()? getPlaceHolder; - final BoxFit? boxFit; + final ValueGetter? getPlaceHolder; + final BoxFit fit; + final Alignment alignment; static Color? reduceLuxColor = Pref.reduceLuxColor; static bool reduce = false; @override Widget build(BuildContext context) { - final noRadius = type == ImageType.emote || radius == 0; - final Widget child; - + final isEmote = type == ImageType.emote; + final isAvatar = type == ImageType.avatar; if (src?.isNotEmpty == true) { - child = noRadius - ? _buildImage(context, noRadius) - : type == ImageType.avatar - ? ClipOval(child: _buildImage(context, noRadius)) - : ClipRRect( - borderRadius: radius != null - ? BorderRadius.circular(radius!) - : StyleString.mdRadius, - child: _buildImage(context, noRadius), - ); + Widget child = _buildImage(context, isEmote: isEmote, isAvatar: isAvatar); + if (isEmote) { + return child; + } else if (isAvatar) { + return ClipOval(child: child); + } else { + return ClipRRect(borderRadius: borderRadius, child: child); + } } else { - child = getPlaceHolder?.call() ?? _placeholder(context, noRadius); + return getPlaceHolder?.call() ?? + _placeholder(context, isEmote: isEmote, isAvatar: isAvatar); } - - return semanticsLabel?.isNotEmpty == true - ? Semantics( - container: true, - image: true, - excludeSemantics: true, - label: semanticsLabel, - child: child, - ) - : child; } - Widget _buildImage(BuildContext context, bool noRadius) { + Widget _buildImage( + BuildContext context, { + required bool isEmote, + required bool isAvatar, + }) { int? memCacheWidth, memCacheHeight; if (height == null || forceUseCacheWidth || width <= height!) { memCacheWidth = width.cacheSize(context); @@ -86,35 +75,36 @@ class NetworkImgLayer extends StatelessWidget { height: height, memCacheWidth: memCacheWidth, memCacheHeight: memCacheHeight, - fit: boxFit ?? BoxFit.cover, - alignment: isLongPic ? Alignment.topCenter : Alignment.center, - fadeOutDuration: fadeOutDuration ?? const Duration(milliseconds: 120), - fadeInDuration: fadeInDuration ?? const Duration(milliseconds: 120), + fit: fit, + alignment: alignment, + fadeOutDuration: fadeOutDuration, + fadeInDuration: fadeInDuration, filterQuality: FilterQuality.low, - placeholder: (context, url) => - getPlaceHolder?.call() ?? _placeholder(context, noRadius), - errorWidget: (context, url, error) => _placeholder(context, noRadius), + placeholder: (_, _) => + getPlaceHolder?.call() ?? + _placeholder(context, isEmote: isEmote, isAvatar: isAvatar), + errorWidget: (_, _, _) => + _placeholder(context, isEmote: isEmote, isAvatar: isAvatar), colorBlendMode: reduce ? BlendMode.modulate : null, color: reduce ? reduceLuxColor : null, ); } - Widget _placeholder(BuildContext context, bool noRadius) { - final isAvatar = type == ImageType.avatar; + Widget _placeholder( + BuildContext context, { + required bool isEmote, + required bool isAvatar, + }) { return Container( width: width, height: height, - clipBehavior: noRadius ? Clip.none : Clip.antiAlias, + clipBehavior: isEmote ? Clip.none : Clip.antiAlias, decoration: BoxDecoration( shape: isAvatar ? BoxShape.circle : BoxShape.rectangle, color: Theme.of( context, ).colorScheme.onInverseSurface.withValues(alpha: 0.4), - borderRadius: noRadius || isAvatar - ? null - : radius != null - ? BorderRadius.circular(radius!) - : StyleString.mdRadius, + borderRadius: isEmote || isAvatar ? null : borderRadius, ), child: Center( child: Image.asset( diff --git a/lib/common/widgets/pendant_avatar.dart b/lib/common/widgets/pendant_avatar.dart index 14bd91fc8..7d0ae796f 100644 --- a/lib/common/widgets/pendant_avatar.dart +++ b/lib/common/widgets/pendant_avatar.dart @@ -1,6 +1,7 @@ import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/models/common/avatar_badge_type.dart'; import 'package:PiliPlus/models/common/image_type.dart'; +import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/string_ext.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:PiliPlus/utils/storage_pref.dart'; @@ -50,7 +51,7 @@ class PendantAvatar extends StatelessWidget { top: -0.375 * size + (size == 80 ? 2 : 0), child: IgnorePointer( child: NetworkImgLayer( - radius: 0, + type: .emote, width: pendantSize, height: pendantSize, src: garbPendantImage, @@ -105,7 +106,7 @@ class PendantAvatar extends StatelessWidget { ), ) else if (_badgeType != BadgeType.none) - _buildBadge(colorScheme, isMemberAvatar), + _buildBadge(context, colorScheme, isMemberAvatar), ], ); } @@ -137,11 +138,17 @@ class PendantAvatar extends StatelessWidget { type: ImageType.avatar, ); - Widget _buildBadge(ColorScheme colorScheme, bool isMemberAvatar) { + Widget _buildBadge( + BuildContext context, + ColorScheme colorScheme, + bool isMemberAvatar, + ) { final child = switch (_badgeType) { BadgeType.vip => Image.asset( 'assets/images/big-vip.png', + width: badgeSize, height: badgeSize, + cacheWidth: badgeSize.cacheSize(context), semanticLabel: _badgeType.desc, ), _ => Icon( diff --git a/lib/common/widgets/video_card/video_card_v.dart b/lib/common/widgets/video_card/video_card_v.dart index 0023cc372..6c7d7f305 100644 --- a/lib/common/widgets/video_card/video_card_v.dart +++ b/lib/common/widgets/video_card/video_card_v.dart @@ -98,7 +98,7 @@ class VideoCardV extends StatelessWidget { src: videoItem.cover, width: maxWidth, height: maxHeight, - radius: 0, + type: .emote, ), if (videoItem.duration > 0) PBadge( diff --git a/lib/pages/about/view.dart b/lib/pages/about/view.dart index 157ca7ef8..9a034bdbf 100644 --- a/lib/pages/about/view.dart +++ b/lib/pages/about/view.dart @@ -13,6 +13,7 @@ import 'package:PiliPlus/utils/accounts/account.dart'; import 'package:PiliPlus/utils/cache_manager.dart'; import 'package:PiliPlus/utils/date_utils.dart'; import 'package:PiliPlus/utils/extension/context_ext.dart'; +import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/login_utils.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; @@ -110,6 +111,7 @@ class _AboutPageState extends State { child: Image.asset( width: 150, height: 150, + cacheWidth: 150.cacheSize(context), 'assets/images/logo/logo.png', ), ), diff --git a/lib/pages/article/widgets/opus_content.dart b/lib/pages/article/widgets/opus_content.dart index ce52c14e7..87e8b5ab8 100644 --- a/lib/pages/article/widgets/opus_content.dart +++ b/lib/pages/article/widgets/opus_content.dart @@ -357,10 +357,12 @@ class OpusContent extends StatelessWidget { spacing: 10, children: [ NetworkImgLayer( - radius: 6, width: 104, height: 65, src: element.linkCard!.card!.ugc!.cover, + borderRadius: const BorderRadius.all( + Radius.circular(6), + ), ), Expanded( child: Column( @@ -396,10 +398,12 @@ class OpusContent extends StatelessWidget { spacing: 10, children: [ NetworkImgLayer( - radius: 6, width: 104, height: 65, src: element.linkCard!.card!.common!.cover, + borderRadius: const BorderRadius.all( + Radius.circular(6), + ), ), Expanded( child: Column( @@ -433,10 +437,12 @@ class OpusContent extends StatelessWidget { spacing: 10, children: [ NetworkImgLayer( - radius: 6, width: 104, height: 65, src: element.linkCard!.card!.live!.cover, + borderRadius: const BorderRadius.all( + Radius.circular(6), + ), ), Expanded( child: Column( @@ -470,10 +476,12 @@ class OpusContent extends StatelessWidget { spacing: 10, children: [ NetworkImgLayer( - radius: 6, width: 104, height: 65, src: element.linkCard!.card!.opus!.cover, + borderRadius: const BorderRadius.all( + Radius.circular(6), + ), ), Expanded( child: Column( @@ -531,10 +539,12 @@ class OpusContent extends StatelessWidget { spacing: 10, children: [ NetworkImgLayer( - radius: 6, width: 104, height: 65, src: element.linkCard!.card!.music!.cover, + borderRadius: const BorderRadius.all( + Radius.circular(6), + ), ), Expanded( child: Column( @@ -569,10 +579,12 @@ class OpusContent extends StatelessWidget { spacing: 10, children: [ NetworkImgLayer( - radius: 6, width: 104, height: 65, src: e.cover, + borderRadius: const BorderRadius.all( + Radius.circular(6), + ), ), Expanded( child: Column( diff --git a/lib/pages/article_list/view.dart b/lib/pages/article_list/view.dart index a9d19affd..77c2d863e 100644 --- a/lib/pages/article_list/view.dart +++ b/lib/pages/article_list/view.dart @@ -117,7 +117,9 @@ class _ArticleListPageState extends State with GridMixin { width: 91, height: 120, src: item.imageUrl, - radius: 6, + borderRadius: const BorderRadius.all( + Radius.circular(6), + ), ), const SizedBox(width: 10), ], diff --git a/lib/pages/audio/view.dart b/lib/pages/audio/view.dart index 7c6a7ae7a..2457ec966 100644 --- a/lib/pages/audio/view.dart +++ b/lib/pages/audio/view.dart @@ -316,6 +316,9 @@ class _AudioPageState extends State { 'assets/images/live.gif', width: 16, height: 16, + cacheWidth: 16.cacheSize( + context, + ), color: colorScheme.primary, ), @@ -358,6 +361,9 @@ class _AudioPageState extends State { 'assets/images/live.gif', width: 16, height: 16, + cacheWidth: 16.cacheSize( + context, + ), color: colorScheme.primary, ), ), diff --git a/lib/pages/dynamics/widgets/additional_panel.dart b/lib/pages/dynamics/widgets/additional_panel.dart index 7a7db9c0a..83f8aff68 100644 --- a/lib/pages/dynamics/widgets/additional_panel.dart +++ b/lib/pages/dynamics/widgets/additional_panel.dart @@ -330,7 +330,9 @@ Widget addWidget( width: 45, height: 45, src: e.cover, - radius: 6, + borderRadius: const BorderRadius.all( + Radius.circular(6), + ), ), const SizedBox(width: 10), ], @@ -498,7 +500,9 @@ Widget addWidget( width: 45, height: 45, src: content.cover, - radius: 6, + borderRadius: const BorderRadius.all( + Radius.circular(6), + ), ), const SizedBox(width: 10), ], @@ -567,7 +571,7 @@ Widget addWidget( mainAxisSize: .min, children: [ NetworkImgLayer( - radius: 0, + type: .emote, width: 30, height: 30, src: team.pic, diff --git a/lib/pages/dynamics/widgets/live_panel_sub.dart b/lib/pages/dynamics/widgets/live_panel_sub.dart index bb6e2ad0d..7852f8324 100644 --- a/lib/pages/dynamics/widgets/live_panel_sub.dart +++ b/lib/pages/dynamics/widgets/live_panel_sub.dart @@ -3,6 +3,7 @@ import 'package:PiliPlus/common/widgets/badge.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/models/common/badge_type.dart'; import 'package:PiliPlus/models/dynamics/result.dart'; +import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:flutter/material.dart'; Widget livePanelSub( @@ -58,6 +59,7 @@ Widget livePanelSub( top: 6, child: Image.asset( height: 16, + cacheHeight: 16.cacheSize(context), 'assets/images/live/live.gif', filterQuality: FilterQuality.low, ), diff --git a/lib/pages/dynamics/widgets/live_rcmd_panel.dart b/lib/pages/dynamics/widgets/live_rcmd_panel.dart index 17e08c9a8..2d438d3bb 100644 --- a/lib/pages/dynamics/widgets/live_rcmd_panel.dart +++ b/lib/pages/dynamics/widgets/live_rcmd_panel.dart @@ -3,6 +3,7 @@ import 'package:PiliPlus/common/widgets/badge.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/models/common/badge_type.dart'; import 'package:PiliPlus/models/dynamics/result.dart'; +import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:flutter/material.dart'; Widget liveRcmdPanel( @@ -52,6 +53,7 @@ Widget liveRcmdPanel( top: 6, child: Image.asset( height: 16, + cacheHeight: 16.cacheSize(context), 'assets/images/live/live.gif', filterQuality: FilterQuality.low, ), diff --git a/lib/pages/dynamics/widgets/module_panel.dart b/lib/pages/dynamics/widgets/module_panel.dart index 260ccf0ae..e19de3ff4 100644 --- a/lib/pages/dynamics/widgets/module_panel.dart +++ b/lib/pages/dynamics/widgets/module_panel.dart @@ -224,10 +224,12 @@ Widget module( spacing: 10, children: [ NetworkImgLayer( - radius: 8, width: 45, height: 45, src: music.cover, + borderRadius: const BorderRadius.all( + Radius.circular(8), + ), ), Expanded( child: Column( diff --git a/lib/pages/dynamics/widgets/up_panel.dart b/lib/pages/dynamics/widgets/up_panel.dart index 92dd25d18..43f5408eb 100644 --- a/lib/pages/dynamics/widgets/up_panel.dart +++ b/lib/pages/dynamics/widgets/up_panel.dart @@ -6,6 +6,7 @@ import 'package:PiliPlus/models/dynamics/up.dart'; import 'package:PiliPlus/pages/dynamics/controller.dart'; import 'package:PiliPlus/pages/live_follow/view.dart'; import 'package:PiliPlus/utils/accounts.dart'; +import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/feed_back.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; @@ -150,41 +151,64 @@ class _UpPanelState extends State { Widget avatar; if (isAll) { - avatar = const CircleAvatar( - backgroundColor: Color(0xFF5CB67B), - backgroundImage: AssetImage('assets/images/logo/logo.png'), + avatar = DecoratedBox( + decoration: BoxDecoration( + shape: .circle, + border: Border.all( + width: 5, + color: const Color(0xFF5CB67B), + ), + ), + child: Image.asset( + width: 38, + height: 38, + cacheWidth: 38.cacheSize(context), + 'assets/images/logo/logo.png', + ), ); } else { - avatar = Stack( - clipBehavior: Clip.none, - children: [ - Padding( - padding: const EdgeInsets.symmetric(horizontal: 4), - child: NetworkImgLayer( - width: 38, - height: 38, - src: data.face, - type: ImageType.avatar, - ), - ), - Positioned( - top: isLive && !isTop ? -5 : 0, - right: isLive ? -6 : 4, - child: Badge( - smallSize: 8, - label: isLive ? const Text(' Live ') : null, - textColor: theme.colorScheme.onSecondaryContainer, - alignment: AlignmentDirectional.topStart, - isLabelVisible: isLive || (data.hasUpdate ?? false), - backgroundColor: isLive - ? theme.colorScheme.secondaryContainer.withValues( - alpha: 0.75, - ) - : theme.colorScheme.primary, - ), - ), - ], + avatar = Padding( + padding: const EdgeInsets.symmetric(horizontal: 4), + child: NetworkImgLayer( + width: 38, + height: 38, + src: data.face, + type: ImageType.avatar, + ), ); + if (isLive) { + avatar = Stack( + clipBehavior: .none, + children: [ + avatar, + Positioned( + top: isLive && !isTop ? -5 : 0, + right: -6, + child: Badge( + label: const Text(' Live '), + textColor: theme.colorScheme.onSecondaryContainer, + backgroundColor: theme.colorScheme.secondaryContainer + .withValues(alpha: 0.75), + ), + ), + ], + ); + } else if (data.hasUpdate ?? false) { + avatar = Stack( + clipBehavior: .none, + children: [ + avatar, + Positioned( + top: 0, + right: 4, + child: Badge( + smallSize: 8, + backgroundColor: theme.colorScheme.primary, + ), + ), + ], + ); + } } return SizedBox( diff --git a/lib/pages/dynamics/widgets/video_panel.dart b/lib/pages/dynamics/widgets/video_panel.dart index c28f61a77..8cad25f82 100644 --- a/lib/pages/dynamics/widgets/video_panel.dart +++ b/lib/pages/dynamics/widgets/video_panel.dart @@ -4,6 +4,7 @@ import 'package:PiliPlus/common/widgets/badge.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/models/common/badge_type.dart'; import 'package:PiliPlus/models/dynamics/result.dart'; +import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/num_utils.dart'; import 'package:flutter/material.dart'; @@ -123,6 +124,7 @@ Widget videoSeasonWidget( 'assets/images/play.png', width: 50, height: 50, + cacheHeight: 50.cacheSize(context), ), ], ), diff --git a/lib/pages/dynamics/widgets/vote.dart b/lib/pages/dynamics/widgets/vote.dart index 309885597..aa300e5ce 100644 --- a/lib/pages/dynamics/widgets/vote.dart +++ b/lib/pages/dynamics/widgets/vote.dart @@ -339,7 +339,7 @@ class _VotePanelState extends State { src: opt.imgUrl, width: constraints.maxWidth, height: constraints.maxHeight, - radius: 0, + type: .emote, ), ), ), diff --git a/lib/pages/dynamics_create_vote/view.dart b/lib/pages/dynamics_create_vote/view.dart index 0f3df8527..c6a9966ec 100644 --- a/lib/pages/dynamics_create_vote/view.dart +++ b/lib/pages/dynamics_create_vote/view.dart @@ -321,7 +321,9 @@ class _CreateVotePageState extends State { src: imgUrl, width: 40, height: 40, - radius: 6, + borderRadius: const BorderRadius.all( + Radius.circular(6), + ), ), ), if (showDel) diff --git a/lib/pages/dynamics_repost/view.dart b/lib/pages/dynamics_repost/view.dart index 21c2d011c..2b1601fa8 100644 --- a/lib/pages/dynamics_repost/view.dart +++ b/lib/pages/dynamics_repost/view.dart @@ -169,10 +169,12 @@ class _RepostPanelState extends CommonRichTextPubPageState { children: [ if (_pic != null) ...[ NetworkImgLayer( - radius: 6, width: 40, height: 40, src: _pic, + borderRadius: const BorderRadius.all( + Radius.circular(6), + ), ), const SizedBox(width: 10), ], diff --git a/lib/pages/emote/view.dart b/lib/pages/emote/view.dart index cc848854f..6f5d168bb 100644 --- a/lib/pages/emote/view.dart +++ b/lib/pages/emote/view.dart @@ -98,7 +98,7 @@ class _EmotePanelState extends State width: size, height: size, type: ImageType.emote, - boxFit: BoxFit.contain, + fit: BoxFit.contain, ), ); if (!isTextEmote) { @@ -124,7 +124,7 @@ class _EmotePanelState extends State width: 65, height: 65, type: ImageType.emote, - boxFit: BoxFit.contain, + fit: BoxFit.contain, ), Text( item.meta?.alias ?? diff --git a/lib/pages/episode_panel/view.dart b/lib/pages/episode_panel/view.dart index 8a6bc6e33..42525aa40 100644 --- a/lib/pages/episode_panel/view.dart +++ b/lib/pages/episode_panel/view.dart @@ -25,6 +25,7 @@ import 'package:PiliPlus/pages/video/introduction/ugc/widgets/page.dart'; import 'package:PiliPlus/utils/accounts.dart'; import 'package:PiliPlus/utils/date_utils.dart'; import 'package:PiliPlus/utils/duration_utils.dart'; +import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/scroll_controller_ext.dart'; import 'package:PiliPlus/utils/id_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; @@ -520,6 +521,7 @@ class _EpisodePanelState extends State 'assets/images/live.png', color: primary, height: 12, + cacheHeight: 12.cacheSize(context), semanticLabel: "正在播放:", ), Expanded( diff --git a/lib/pages/fav/pgc/widget/item.dart b/lib/pages/fav/pgc/widget/item.dart index 791acde1d..ccfe8d468 100644 --- a/lib/pages/fav/pgc/widget/item.dart +++ b/lib/pages/fav/pgc/widget/item.dart @@ -69,10 +69,12 @@ class FavPgcItem extends StatelessWidget { clipBehavior: Clip.none, children: [ NetworkImgLayer( - radius: 4, src: item.cover, width: boxConstraints.maxWidth, height: boxConstraints.maxHeight, + borderRadius: const BorderRadius.all( + Radius.circular(4), + ), ), PBadge( right: 4, diff --git a/lib/pages/fav_create/view.dart b/lib/pages/fav_create/view.dart index 4ddfd6c57..439afabe3 100644 --- a/lib/pages/fav_create/view.dart +++ b/lib/pages/fav_create/view.dart @@ -246,7 +246,9 @@ class _CreateFavPageState extends State { src: _cover, height: 55, width: 88, - radius: 6, + borderRadius: const BorderRadius.all( + Radius.circular(6), + ), ), ), Icon( diff --git a/lib/pages/hot/view.dart b/lib/pages/hot/view.dart index 8fcf73d9b..3ee7e3f45 100644 --- a/lib/pages/hot/view.dart +++ b/lib/pages/hot/view.dart @@ -43,7 +43,7 @@ class _HotPageState extends CommonPageState NetworkImgLayer( width: 35, height: 35, - radius: 0, + type: .emote, src: iconUrl, ), const SizedBox(height: 4), diff --git a/lib/pages/live/widgets/live_item_app.dart b/lib/pages/live/widgets/live_item_app.dart index 17b76e63c..9c74c1237 100644 --- a/lib/pages/live/widgets/live_item_app.dart +++ b/lib/pages/live/widgets/live_item_app.dart @@ -42,7 +42,7 @@ class LiveCardVApp extends StatelessWidget { src: item.cover!, width: maxWidth, height: maxHeight, - radius: 0, + type: .emote, ), Positioned( left: 0, diff --git a/lib/pages/live_emote/view.dart b/lib/pages/live_emote/view.dart index 9de05abbf..b8dacb80f 100644 --- a/lib/pages/live_emote/view.dart +++ b/lib/pages/live_emote/view.dart @@ -125,7 +125,7 @@ class _LiveEmotePanelState extends State width: 65, height: 65, type: ImageType.emote, - boxFit: BoxFit.contain, + fit: BoxFit.contain, ), Text( e.emoji == null @@ -146,7 +146,7 @@ class _LiveEmotePanelState extends State child: Padding( padding: const EdgeInsets.all(6), child: NetworkImgLayer( - boxFit: BoxFit.contain, + fit: BoxFit.contain, src: e.url, width: width, height: height, diff --git a/lib/pages/live_follow/widgets/live_item_follow.dart b/lib/pages/live_follow/widgets/live_item_follow.dart index 063d9e11a..ef110e9da 100644 --- a/lib/pages/live_follow/widgets/live_item_follow.dart +++ b/lib/pages/live_follow/widgets/live_item_follow.dart @@ -42,7 +42,7 @@ class LiveCardVFollow extends StatelessWidget { src: liveItem.roomCover!, width: maxWidth, height: maxHeight, - radius: 0, + type: .emote, ), Positioned( left: 0, diff --git a/lib/pages/live_room/view.dart b/lib/pages/live_room/view.dart index 0f256ff6b..0fb1d83a0 100644 --- a/lib/pages/live_room/view.dart +++ b/lib/pages/live_room/view.dart @@ -401,6 +401,9 @@ class _LiveRoomPageState extends State child = Image.asset( 'assets/images/live/default_bg.webp', fit: BoxFit.cover, + width: maxWidth, + height: maxHeight, + cacheWidth: maxWidth.cacheSize(context), ); } return Positioned.fill( diff --git a/lib/pages/live_room/widgets/chat_panel.dart b/lib/pages/live_room/widgets/chat_panel.dart index e8604c7e9..18fcfa584 100644 --- a/lib/pages/live_room/widgets/chat_panel.dart +++ b/lib/pages/live_room/widgets/chat_panel.dart @@ -204,7 +204,6 @@ class LiveRoomChatPanel extends StatelessWidget { : isUpower ? uemote.height! : uemote.height! / devicePixelRatio, - semanticsLabel: obj.text, ), ); } @@ -224,7 +223,6 @@ class LiveRoomChatPanel extends StatelessWidget { type: ImageType.emote, width: emote.width, height: emote.height, - semanticsLabel: key, ), ), ); diff --git a/lib/pages/live_search/widgets/live_search_room.dart b/lib/pages/live_search/widgets/live_search_room.dart index b75197df5..4ffe0327d 100644 --- a/lib/pages/live_search/widgets/live_search_room.dart +++ b/lib/pages/live_search/widgets/live_search_room.dart @@ -43,7 +43,7 @@ class LiveCardVSearch extends StatelessWidget { src: item.cover!, width: maxWidth, height: maxHeight, - radius: 0, + type: .emote, ), Positioned( left: 0, diff --git a/lib/pages/live_search/widgets/live_search_user.dart b/lib/pages/live_search/widgets/live_search_user.dart index 4d992a4f7..358824ae5 100644 --- a/lib/pages/live_search/widgets/live_search_user.dart +++ b/lib/pages/live_search/widgets/live_search_user.dart @@ -1,6 +1,7 @@ import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/models/common/image_type.dart'; import 'package:PiliPlus/models_new/live/live_search/user_item.dart'; +import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/num_utils.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:flutter/material.dart'; @@ -49,7 +50,11 @@ class LiveSearchUserItem extends StatelessWidget { ), if (item.liveStatus == 1) ...[ const SizedBox(width: 10), - Image.asset(height: 14, 'assets/images/live/live.gif'), + Image.asset( + height: 14, + cacheHeight: 14.cacheSize(context), + 'assets/images/live/live.gif', + ), ], ], ), diff --git a/lib/pages/member/widget/user_info_card.dart b/lib/pages/member/widget/user_info_card.dart index 2b2b53713..13fb5ceb3 100644 --- a/lib/pages/member/widget/user_info_card.dart +++ b/lib/pages/member/widget/user_info_card.dart @@ -140,7 +140,11 @@ class UserInfoCard extends StatelessWidget { ); } - List _buildLeft(ColorScheme colorScheme, bool isLight) => [ + List _buildLeft( + BuildContext context, + ColorScheme colorScheme, + bool isLight, + ) => [ Padding( padding: const EdgeInsets.only(left: 20, right: 20), child: Wrap( @@ -169,8 +173,12 @@ class UserInfoCard extends StatelessWidget { ), ), Image.asset( - 'assets/images/lv/lv${card.levelInfo?.identity == 2 ? '6_s' : card.levelInfo?.currentLevel}.png', + Utils.levelName( + card.levelInfo!.currentLevel!, + isSeniorMember: card.levelInfo?.identity == 2, + ), height: 11, + cacheHeight: 11.cacheSize(context), semanticLabel: '等级${card.levelInfo?.currentLevel}', ), if (card.vip?.status == 1) @@ -498,7 +506,7 @@ class UserInfoCard extends StatelessWidget { ], ), const SizedBox(height: 5), - ..._buildLeft(colorScheme, isLight), + ..._buildLeft(context, colorScheme, isLight), if (card.prInfo?.content?.isNotEmpty == true) buildPrInfo(context, colorScheme, isLight, card.prInfo!), const SizedBox(height: 5), @@ -585,7 +593,7 @@ class UserInfoCard extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ const SizedBox(height: 10), - ..._buildLeft(colorScheme, isLight), + ..._buildLeft(context, colorScheme, isLight), const SizedBox(height: 5), ], ), diff --git a/lib/pages/member_audio/widgets/item.dart b/lib/pages/member_audio/widgets/item.dart index 847caab28..601c5d3e5 100644 --- a/lib/pages/member_audio/widgets/item.dart +++ b/lib/pages/member_audio/widgets/item.dart @@ -46,10 +46,12 @@ class MemberAudioItem extends StatelessWidget { builder: (BuildContext context, BoxConstraints boxConstraints) { return NetworkImgLayer( - radius: 4, src: item.cover, width: boxConstraints.maxWidth, height: boxConstraints.maxHeight, + borderRadius: const BorderRadius.all( + Radius.circular(4), + ), ); }, ), diff --git a/lib/pages/member_cheese/widgets/item.dart b/lib/pages/member_cheese/widgets/item.dart index 49ea2ce45..9f75c8b3a 100644 --- a/lib/pages/member_cheese/widgets/item.dart +++ b/lib/pages/member_cheese/widgets/item.dart @@ -91,10 +91,12 @@ class MemberCheeseItem extends StatelessWidget { child: LayoutBuilder( builder: (context, boxConstraints) { Widget child = NetworkImgLayer( - radius: 4, src: item.cover, width: boxConstraints.maxWidth, height: boxConstraints.maxHeight, + borderRadius: const BorderRadius.all( + Radius.circular(4), + ), ); if (item.marks?.isNotEmpty == true) { return Stack( diff --git a/lib/pages/member_coin_arc/widgets/item.dart b/lib/pages/member_coin_arc/widgets/item.dart index 52a5e67ed..bfde0d3fc 100644 --- a/lib/pages/member_coin_arc/widgets/item.dart +++ b/lib/pages/member_coin_arc/widgets/item.dart @@ -70,7 +70,7 @@ class MemberCoinLikeItem extends StatelessWidget { src: item.cover, width: maxWidth, height: maxHeight, - radius: 0, + type: .emote, ), if (item.isCooperation == true) const PBadge( diff --git a/lib/pages/member_comic/widgets/item.dart b/lib/pages/member_comic/widgets/item.dart index 1431c8a9f..a9be6da0d 100644 --- a/lib/pages/member_comic/widgets/item.dart +++ b/lib/pages/member_comic/widgets/item.dart @@ -46,10 +46,12 @@ class MemberComicItem extends StatelessWidget { builder: (BuildContext context, BoxConstraints boxConstraints) { return NetworkImgLayer( - radius: 4, src: item.cover, width: boxConstraints.maxWidth, height: boxConstraints.maxHeight, + borderRadius: const BorderRadius.all( + Radius.circular(4), + ), ); }, ), diff --git a/lib/pages/member_home/widgets/video_card_v_member_home.dart b/lib/pages/member_home/widgets/video_card_v_member_home.dart index 0df85361b..e84c904a3 100644 --- a/lib/pages/member_home/widgets/video_card_v_member_home.dart +++ b/lib/pages/member_home/widgets/video_card_v_member_home.dart @@ -91,7 +91,7 @@ class VideoCardVMemberHome extends StatelessWidget { src: videoItem.cover, width: maxWidth, height: maxHeight, - radius: 0, + type: .emote, ), if (videoItem.duration > 0) PBadge( diff --git a/lib/pages/member_shop/widgets/item.dart b/lib/pages/member_shop/widgets/item.dart index dc46c3924..b914e4d0d 100644 --- a/lib/pages/member_shop/widgets/item.dart +++ b/lib/pages/member_shop/widgets/item.dart @@ -35,7 +35,7 @@ class MemberShopItem extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ NetworkImgLayer( - radius: 0, + type: .emote, src: item.cover?.url, width: maxWidth, height: maxWidth, diff --git a/lib/pages/mine/view.dart b/lib/pages/mine/view.dart index f6890ff8f..f660ca889 100644 --- a/lib/pages/mine/view.dart +++ b/lib/pages/mine/view.dart @@ -16,6 +16,7 @@ import 'package:PiliPlus/pages/main/controller.dart'; import 'package:PiliPlus/pages/mine/controller.dart'; import 'package:PiliPlus/pages/mine/widgets/item.dart'; import 'package:PiliPlus/utils/extension/get_ext.dart'; +import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; import 'package:PiliPlus/utils/utils.dart'; @@ -267,7 +268,6 @@ class _MediaPageState extends CommonPageState children: [ NetworkImgLayer( src: userInfo.face, - semanticsLabel: '头像', type: ImageType.avatar, width: 55, height: 55, @@ -279,6 +279,7 @@ class _MediaPageState extends CommonPageState child: Image.asset( 'assets/images/big-vip.png', height: 19, + cacheHeight: 19.cacheSize(context), semanticLabel: "大会员", ), ), @@ -288,6 +289,7 @@ class _MediaPageState extends CommonPageState child: Image.asset( width: 55, height: 55, + cacheHeight: 55.cacheSize(context), 'assets/images/noface.jpeg', semanticLabel: "默认头像", ), @@ -314,12 +316,12 @@ class _MediaPageState extends CommonPageState ), ), Image.asset( - 'assets/images/lv/lv${levelInfo == null - ? 0 - : userInfo.isSeniorMember == 1 - ? '6_s' - : levelInfo.currentLevel}.png', + Utils.levelName( + levelInfo!.currentLevel!, + isSeniorMember: userInfo.isSeniorMember == 1, + ), height: 10, + cacheHeight: 10.cacheSize(context), ), ], ), @@ -340,11 +342,11 @@ class _MediaPageState extends CommonPageState style: coinLabelStyle, ), TextSpan( - text: levelInfo?.currentExp?.toString() ?? '-', + text: levelInfo.currentExp?.toString() ?? '-', style: coinValStyle, ), TextSpan( - text: "/${levelInfo?.nextExp ?? '-'}", + text: "/${levelInfo.nextExp ?? '-'}", style: coinLabelStyle, ), ], diff --git a/lib/pages/msg_feed_top/at_me/view.dart b/lib/pages/msg_feed_top/at_me/view.dart index 8227de09a..509a168ab 100644 --- a/lib/pages/msg_feed_top/at_me/view.dart +++ b/lib/pages/msg_feed_top/at_me/view.dart @@ -166,8 +166,10 @@ class _AtMePageState extends State { ? NetworkImgLayer( width: 45, height: 45, - radius: 8, src: item.item?.image, + borderRadius: const BorderRadius.all( + Radius.circular(8), + ), ) : null, ); diff --git a/lib/pages/msg_feed_top/like_me/view.dart b/lib/pages/msg_feed_top/like_me/view.dart index 8aad8a94a..a9801ebd3 100644 --- a/lib/pages/msg_feed_top/like_me/view.dart +++ b/lib/pages/msg_feed_top/like_me/view.dart @@ -335,8 +335,10 @@ class _LikeMePageState extends State { NetworkImgLayer( width: 45, height: 45, - radius: 8, src: item.item!.image, + borderRadius: const BorderRadius.all( + Radius.circular(8), + ), ), if (item.noticeState == 1) ...[ if (item.item?.image?.isNotEmpty == true) const SizedBox(width: 4), diff --git a/lib/pages/pgc_review/child/view.dart b/lib/pages/pgc_review/child/view.dart index 55edf9a5c..0c97c3e0f 100644 --- a/lib/pages/pgc_review/child/view.dart +++ b/lib/pages/pgc_review/child/view.dart @@ -12,9 +12,11 @@ import 'package:PiliPlus/models_new/pgc/pgc_review/list.dart'; import 'package:PiliPlus/pages/pgc_review/child/controller.dart'; import 'package:PiliPlus/pages/pgc_review/post/view.dart'; import 'package:PiliPlus/utils/accounts.dart'; +import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/num_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; +import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:get/get.dart'; @@ -235,8 +237,9 @@ class _PgcReviewChildPageState extends State ), ), Image.asset( - 'assets/images/lv/lv${item.author!.level}.png', + Utils.levelName(item.author!.level!), height: 11, + cacheHeight: 11.cacheSize(context), ), ], ), diff --git a/lib/pages/rank/zone/widget/pgc_rank_item.dart b/lib/pages/rank/zone/widget/pgc_rank_item.dart index 2044720ec..bac4d485d 100644 --- a/lib/pages/rank/zone/widget/pgc_rank_item.dart +++ b/lib/pages/rank/zone/widget/pgc_rank_item.dart @@ -42,10 +42,12 @@ class PgcRankItem extends StatelessWidget { child: LayoutBuilder( builder: (context, constraints) { return NetworkImgLayer( - radius: 6, width: constraints.maxWidth, height: constraints.maxHeight, src: item.cover, + borderRadius: const BorderRadius.all( + Radius.circular(6), + ), ); }, ), diff --git a/lib/pages/save_panel/view.dart b/lib/pages/save_panel/view.dart index a023cf800..5a9b7a9f6 100644 --- a/lib/pages/save_panel/view.dart +++ b/lib/pages/save_panel/view.dart @@ -16,6 +16,7 @@ import 'package:PiliPlus/pages/video/introduction/ugc/controller.dart'; import 'package:PiliPlus/pages/video/reply/widgets/reply_item_grpc.dart'; import 'package:PiliPlus/utils/date_utils.dart'; import 'package:PiliPlus/utils/extension/context_ext.dart'; +import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/image_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; @@ -411,13 +412,15 @@ class _SavePanelState extends State { child: Row( children: [ NetworkImgLayer( - radius: 6, src: cover!, height: coverSize, width: coverType == _CoverType.def16_9 ? coverSize * 16 / 9 : coverSize, quality: 100, + borderRadius: const BorderRadius.all( + Radius.circular(6), + ), ), const SizedBox(width: 10), Expanded( @@ -533,6 +536,7 @@ class _SavePanelState extends State { child: Image.asset( 'assets/images/logo/logo_2.png', width: 100, + cacheWidth: 100.cacheSize(context), color: theme.colorScheme.onSurfaceVariant, ), diff --git a/lib/pages/search/widgets/hot_keyword.dart b/lib/pages/search/widgets/hot_keyword.dart index b00c9c74a..793efad4f 100644 --- a/lib/pages/search/widgets/hot_keyword.dart +++ b/lib/pages/search/widgets/hot_keyword.dart @@ -69,6 +69,7 @@ class HotKeyword extends StatelessWidget { 'assets/images/live/live.gif', width: 48, height: 15, + cacheHeight: 15.cacheSize(context), ), ) else if (i.recommendReason?.isNotEmpty == true) diff --git a/lib/pages/search_panel/live/widgets/item.dart b/lib/pages/search_panel/live/widgets/item.dart index ac559a1db..25e09e5ec 100644 --- a/lib/pages/search_panel/live/widgets/item.dart +++ b/lib/pages/search_panel/live/widgets/item.dart @@ -41,7 +41,7 @@ class LiveItem extends StatelessWidget { src: liveItem.cover, width: maxWidth, height: maxHeight, - radius: 0, + type: .emote, ), Positioned( left: 0, diff --git a/lib/pages/search_panel/user/widgets/item.dart b/lib/pages/search_panel/user/widgets/item.dart index ce1d530e9..80d2fe2d5 100644 --- a/lib/pages/search_panel/user/widgets/item.dart +++ b/lib/pages/search_panel/user/widgets/item.dart @@ -1,6 +1,8 @@ import 'package:PiliPlus/common/widgets/pendant_avatar.dart'; import 'package:PiliPlus/models/search/result.dart'; +import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/num_utils.dart'; +import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -49,8 +51,12 @@ class SearchUserItem extends StatelessWidget { ), const SizedBox(width: 6), Image.asset( - 'assets/images/lv/lv${item.isSeniorMember == 1 ? '6_s' : item.level}.png', + Utils.levelName( + item.level!, + isSeniorMember: item.isSeniorMember == 1, + ), height: 11, + cacheHeight: 11.cacheSize(context), semanticLabel: '等级${item.level}', ), ], diff --git a/lib/pages/search_trending/view.dart b/lib/pages/search_trending/view.dart index c9c707065..0e8a22ae2 100644 --- a/lib/pages/search_trending/view.dart +++ b/lib/pages/search_trending/view.dart @@ -125,6 +125,7 @@ class _SearchTrendingPageState extends State { child: Image.asset( width: width, height: height, + cacheWidth: width.cacheSize(context), 'assets/images/trending_banner.png', filterQuality: FilterQuality.low, ), @@ -212,6 +213,7 @@ class _SearchTrendingPageState extends State { 'assets/images/live/live.gif', width: 51, height: 16, + cacheHeight: 16.cacheSize(context), ), ], ], diff --git a/lib/pages/video/download_panel/view.dart b/lib/pages/video/download_panel/view.dart index a599128af..2447adaca 100644 --- a/lib/pages/video/download_panel/view.dart +++ b/lib/pages/video/download_panel/view.dart @@ -18,6 +18,7 @@ import 'package:PiliPlus/pages/video/introduction/ugc/widgets/page.dart'; import 'package:PiliPlus/services/download/download_service.dart'; import 'package:PiliPlus/utils/date_utils.dart'; import 'package:PiliPlus/utils/duration_utils.dart'; +import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/id_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; import 'package:PiliPlus/utils/storage_pref.dart'; @@ -433,6 +434,7 @@ class _DownloadPanelState extends State { 'assets/images/live.png', color: primary, height: 12, + cacheHeight: 12.cacheSize(context), semanticLabel: '正在播放:', ), Expanded( diff --git a/lib/pages/video/introduction/pgc/view.dart b/lib/pages/video/introduction/pgc/view.dart index 227fb0c75..b400cf243 100644 --- a/lib/pages/video/introduction/pgc/view.dart +++ b/lib/pages/video/introduction/pgc/view.dart @@ -126,7 +126,7 @@ class _PgcIntroPageState extends State { slivers: img.map((e) { return SliverToBoxAdapter( child: NetworkImgLayer( - radius: 0, + type: .emote, src: e.url, width: imgWidth, height: imgWidth * e.aspectRatio, @@ -153,7 +153,6 @@ class _PgcIntroPageState extends State { width: 115, height: 153, src: item.cover!, - semanticsLabel: '封面', ), ), ), diff --git a/lib/pages/video/introduction/pgc/widgets/pgc_panel.dart b/lib/pages/video/introduction/pgc/widgets/pgc_panel.dart index ac1d4d69d..faf28dcc8 100644 --- a/lib/pages/video/introduction/pgc/widgets/pgc_panel.dart +++ b/lib/pages/video/introduction/pgc/widgets/pgc_panel.dart @@ -5,6 +5,7 @@ import 'package:PiliPlus/models_new/pgc/pgc_info_model/new_ep.dart'; import 'package:PiliPlus/models_new/video/video_detail/episode.dart' hide EpisodeItem; import 'package:PiliPlus/pages/video/controller.dart'; +import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/storage_pref.dart'; import 'package:PiliPlus/utils/utils.dart'; @@ -191,6 +192,7 @@ class _PgcPanelState extends State { 'assets/images/live.png', color: theme.primary, height: 12, + cacheHeight: 12.cacheSize(context), semanticLabel: "正在播放:", ), ), @@ -212,6 +214,7 @@ class _PgcPanelState extends State { Image.asset( 'assets/images/big-vip.png', height: 16, + cacheHeight: 16.cacheSize(context), semanticLabel: "大会员", ) else diff --git a/lib/pages/video/introduction/ugc/view.dart b/lib/pages/video/introduction/ugc/view.dart index da470c374..19a3fb513 100644 --- a/lib/pages/video/introduction/ugc/view.dart +++ b/lib/pages/video/introduction/ugc/view.dart @@ -24,6 +24,7 @@ import 'package:PiliPlus/utils/date_utils.dart'; import 'package:PiliPlus/utils/duration_utils.dart'; import 'package:PiliPlus/utils/extension/get_ext.dart'; import 'package:PiliPlus/utils/extension/iterable_ext.dart'; +import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/string_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/feed_back.dart'; @@ -1002,6 +1003,7 @@ class _UgcIntroPanelState extends State { 'assets/images/ai.png', height: 18, width: 18, + cacheHeight: 18.cacheSize(context), ), ), ), diff --git a/lib/pages/video/introduction/ugc/widgets/page.dart b/lib/pages/video/introduction/ugc/widgets/page.dart index 26e297912..54859d337 100644 --- a/lib/pages/video/introduction/ugc/widgets/page.dart +++ b/lib/pages/video/introduction/ugc/widgets/page.dart @@ -4,6 +4,7 @@ import 'dart:math'; import 'package:PiliPlus/models_new/video/video_detail/page.dart'; import 'package:PiliPlus/pages/video/controller.dart'; import 'package:PiliPlus/pages/video/introduction/ugc/controller.dart'; +import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/id_utils.dart'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; @@ -199,6 +200,7 @@ class _PagesPanelState extends State { 'assets/images/live.png', color: theme.colorScheme.primary, height: 12, + cacheHeight: 12.cacheSize(context), semanticLabel: "正在播放:", ), const SizedBox(width: 6), diff --git a/lib/pages/video/introduction/ugc/widgets/season.dart b/lib/pages/video/introduction/ugc/widgets/season.dart index f137438b2..cf0ee0fe0 100644 --- a/lib/pages/video/introduction/ugc/widgets/season.dart +++ b/lib/pages/video/introduction/ugc/widgets/season.dart @@ -5,6 +5,7 @@ import 'package:PiliPlus/models_new/video/video_detail/episode.dart'; import 'package:PiliPlus/models_new/video/video_detail/section.dart'; import 'package:PiliPlus/pages/video/controller.dart'; import 'package:PiliPlus/pages/video/introduction/ugc/controller.dart'; +import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -128,6 +129,7 @@ class _SeasonPanelState extends State { 'assets/images/live.png', color: theme.colorScheme.primary, height: 12, + cacheHeight: 12.cacheSize(context), semanticLabel: "正在播放:", ), const SizedBox(width: 10), diff --git a/lib/pages/video/member/view.dart b/lib/pages/video/member/view.dart index 8b8d49121..50366a670 100644 --- a/lib/pages/video/member/view.dart +++ b/lib/pages/video/member/view.dart @@ -17,6 +17,7 @@ import 'package:PiliPlus/pages/video/controller.dart'; import 'package:PiliPlus/pages/video/introduction/ugc/controller.dart'; import 'package:PiliPlus/pages/video/member/controller.dart'; import 'package:PiliPlus/utils/accounts.dart'; +import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/num_utils.dart'; import 'package:PiliPlus/utils/page_utils.dart'; @@ -245,8 +246,12 @@ class _HorizontalMemberPageState extends State { ), const SizedBox(width: 8), Image.asset( - 'assets/images/lv/lv${memberInfoModel.isSeniorMember == 1 ? '6_s' : memberInfoModel.level}.png', + Utils.levelName( + memberInfoModel.level!, + isSeniorMember: memberInfoModel.isSeniorMember == 1, + ), height: 11, + cacheHeight: 11.cacheSize(context), ), ], ), diff --git a/lib/pages/video/note/view.dart b/lib/pages/video/note/view.dart index cd4a7edd5..dcd621d39 100644 --- a/lib/pages/video/note/view.dart +++ b/lib/pages/video/note/view.dart @@ -9,7 +9,9 @@ import 'package:PiliPlus/pages/common/slide/common_slide_page.dart'; import 'package:PiliPlus/pages/video/note/controller.dart'; import 'package:PiliPlus/pages/webview/view.dart'; import 'package:PiliPlus/utils/accounts.dart'; +import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; +import 'package:PiliPlus/utils/utils.dart'; import 'package:extended_nested_scroll_view/extended_nested_scroll_view.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; @@ -256,8 +258,12 @@ class _NoteListPageState extends State ), const SizedBox(width: 6), Image.asset( - 'assets/images/lv/lv${item.author!.isSeniorMember == 1 ? '6_s' : item.author!.level}.png', + Utils.levelName( + item.author!.level!, + isSeniorMember: item.author!.isSeniorMember == 1, + ), height: 11, + cacheHeight: 11.cacheSize(context), ), ], ), diff --git a/lib/pages/video/pay_coins/view.dart b/lib/pages/video/pay_coins/view.dart index 24ed1f6cb..90308ad3b 100644 --- a/lib/pages/video/pay_coins/view.dart +++ b/lib/pages/video/pay_coins/view.dart @@ -299,7 +299,12 @@ class _PayCoinsPageState extends State child: SizedBox( width: 110, height: 155, - child: Image.asset(payImg), + child: Image.asset( + payImg, + width: 110, + height: 155, + cacheWidth: 110.cacheSize(context), + ), ), ), ), @@ -392,6 +397,7 @@ class _PayCoinsPageState extends State index == 0 ? 'assets/images/paycoins/ic_left_disable.png' : 'assets/images/paycoins/ic_left.png', + cacheWidth: 16.cacheSize(context), ), ), ); @@ -416,6 +422,7 @@ class _PayCoinsPageState extends State index == 1 ? 'assets/images/paycoins/ic_right_disable.png' : 'assets/images/paycoins/ic_right.png', + cacheWidth: 16.cacheSize(context), ), ), ); @@ -490,6 +497,9 @@ class _PayCoinsPageState extends State height: 30, child: Image.asset( 'assets/images/paycoins/ic_panel_close.png', + width: 30, + height: 30, + cacheWidth: 30.cacheSize(context), ), ), ), diff --git a/lib/pages/video/reply/widgets/reply_item_grpc.dart b/lib/pages/video/reply/widgets/reply_item_grpc.dart index 5587f61e5..dacad763a 100644 --- a/lib/pages/video/reply/widgets/reply_item_grpc.dart +++ b/lib/pages/video/reply/widgets/reply_item_grpc.dart @@ -227,8 +227,12 @@ class ReplyItemGrpc extends StatelessWidget { ), ), Image.asset( - 'assets/images/lv/lv${replyItem.member.isSeniorMember == 1 ? '6_s' : replyItem.member.level}.png', + Utils.levelName( + replyItem.member.level, + isSeniorMember: replyItem.member.isSeniorMember == 1, + ), height: 11, + cacheHeight: 11.cacheSize(context), ), if (replyItem.mid == upMid) const PBadge( diff --git a/lib/pages/video/view.dart b/lib/pages/video/view.dart index 8d881a9c3..0edd0c1f7 100644 --- a/lib/pages/video/view.dart +++ b/lib/pages/video/view.dart @@ -48,6 +48,7 @@ import 'package:PiliPlus/plugin/pl_player/view.dart'; import 'package:PiliPlus/services/service_locator.dart'; import 'package:PiliPlus/services/shutdown_timer_service.dart'; import 'package:PiliPlus/utils/accounts.dart'; +import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/scroll_controller_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/image_utils.dart'; @@ -1277,6 +1278,7 @@ class _VideoDetailPageVState extends State 'assets/images/play.png', width: 60, height: 60, + cacheHeight: 60.cacheSize(context), ), ), ), @@ -1590,12 +1592,11 @@ class _VideoDetailPageVState extends State onTap: handlePlay, child: Obx( () => NetworkImgLayer( - radius: 0, + type: .emote, quality: 60, src: videoDetailController.cover.value, width: width, height: height, - boxFit: BoxFit.cover, forceUseCacheWidth: true, getPlaceHolder: () => Center( child: Image.asset('assets/images/loading.png'), diff --git a/lib/pages/whisper/widgets/item.dart b/lib/pages/whisper/widgets/item.dart index d175f18ae..4f2b4ce25 100644 --- a/lib/pages/whisper/widgets/item.dart +++ b/lib/pages/whisper/widgets/item.dart @@ -10,6 +10,7 @@ import 'package:PiliPlus/models/common/badge_type.dart'; import 'package:PiliPlus/pages/whisper_secondary/view.dart'; import 'package:PiliPlus/utils/date_utils.dart'; import 'package:PiliPlus/utils/extension/iterable_ext.dart'; +import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; import 'package:fixnum/fixnum.dart'; @@ -235,6 +236,7 @@ class WhisperSessionItem extends StatelessWidget { Image.asset( 'assets/images/live/live.gif', height: 15, + cacheHeight: 15.cacheSize(context), filterQuality: FilterQuality.low, ), ], diff --git a/lib/pages/whisper_detail/view.dart b/lib/pages/whisper_detail/view.dart index e5cf0d06e..010a3d06e 100644 --- a/lib/pages/whisper_detail/view.dart +++ b/lib/pages/whisper_detail/view.dart @@ -16,6 +16,7 @@ import 'package:PiliPlus/pages/whisper_detail/widget/chat_item.dart'; import 'package:PiliPlus/pages/whisper_link_setting/view.dart'; import 'package:PiliPlus/utils/extension/file_ext.dart'; import 'package:PiliPlus/utils/extension/iterable_ext.dart'; +import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/widget_ext.dart'; import 'package:PiliPlus/utils/feed_back.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; @@ -91,6 +92,7 @@ class _WhisperDetailPageState Image.asset( 'assets/images/live/live.gif', height: 16, + cacheHeight: 16.cacheSize(context), filterQuality: FilterQuality.low, ), ], diff --git a/lib/plugin/pl_player/view.dart b/lib/plugin/pl_player/view.dart index f6add645b..c18b9a573 100644 --- a/lib/plugin/pl_player/view.dart +++ b/lib/plugin/pl_player/view.dart @@ -47,6 +47,7 @@ import 'package:PiliPlus/plugin/pl_player/widgets/forward_seek.dart'; import 'package:PiliPlus/plugin/pl_player/widgets/mpv_convert_webp.dart'; import 'package:PiliPlus/plugin/pl_player/widgets/play_pause_btn.dart'; import 'package:PiliPlus/utils/duration_utils.dart'; +import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/id_utils.dart'; import 'package:PiliPlus/utils/image_utils.dart'; @@ -1956,6 +1957,7 @@ class _PLVideoPlayerState extends State Image.asset( 'assets/images/loading.webp', height: 25, + cacheHeight: 25.cacheSize(context), semanticLabel: "加载中", color: Colors.white, ), @@ -2273,7 +2275,7 @@ class _PLVideoPlayerState extends State static const _actionItemHeight = 35.0 - _triangleHeight; DanmakuItem? _suspendedDm; - double dy = 0; + late double dy = 0; late final Rxn _dmOffset = Rxn(); void _removeDmAction() { diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index 25c8bfb78..3fb15d4c5 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -21,6 +21,11 @@ abstract final class Utils { static const jsonEncoder = JsonEncoder.withIndent(' '); + static String levelName( + Object level, { + bool isSeniorMember = false, + }) => 'assets/images/lv/lv${isSeniorMember ? '6_s' : level}.png'; + static Color index2Color(int index, Color color) => switch (index) { 0 => const Color(0xFFfdad13), 1 => const Color(0xFF8aace1),