From 069424f9b6e4f4011d0e02ef5247490b85dceb4c Mon Sep 17 00:00:00 2001 From: dom Date: Sat, 2 May 2026 17:13:33 +0800 Subject: [PATCH] opt icons Signed-off-by: dom --- assets/fonts/custom_icon.ttf | Bin 14868 -> 16944 bytes lib/common/widgets/custom_icon.dart | 68 ++++++++++-------- lib/common/widgets/video_popup_menu.dart | 34 +-------- lib/pages/dynamics/widgets/author_panel.dart | 10 +-- .../child/widgets/search_archive_grpc.dart | 9 +-- lib/pages/setting/models/extra_settings.dart | 45 ++---------- .../video/reply/widgets/reply_item_grpc.dart | 10 +-- lib/pages/video/widgets/header_control.dart | 19 ++--- 8 files changed, 55 insertions(+), 140 deletions(-) diff --git a/assets/fonts/custom_icon.ttf b/assets/fonts/custom_icon.ttf index 74be248273496c19ae17dbcc98c7da6b66e5d7da..f7e4a4eaca64a0ee844b15d5f326c2c4629d13c0 100644 GIT binary patch delta 2509 zcmbVMYiwI*8UEhyTzxzCv3>0LQakqXB~F|;v12<)(pbGpesHzY@&?Gvf2{fT`(HIe+(LeiBiIn#^8DmHw z)^oo1ob$cseZR}|JfcPPhtv-H>Pfc8dvG0p_K$kkfp!Kfpu>GLD{;u*_hu86<wHoyiUXwsdbK8i{s+=JJCoD1J!Es^Uxuyub&e zkp!fMA?2sZOq5ZXAO>SvhVub$hO{cDvgvx(500>w9L;9387KU*I-8qwx?6KY6Xkav zlREYBuBrXGIsata&c1Y99vJ~yR!2tU&h*|Zd(&}iAmF_$nNwj28kGyw#kt*&k59uX z6K}Q%sw{)R2%F2i-I?xnwonG>KlCH1ufK8V*w~Oi=HF+Sh)ezF_8s}|z%GZ#&+r~s z!U~}fY~I}uwk~%d;O?};TxTZ$g>P;?o02B4o(skP8kwF^B?&Abh?362yM}Wx{;o>Vssm}cybaB#8CdniJ6FeU{eIQXa*hMvX1SO@YN-C|U(VR*OVL_;e5$q<`_&_iI z{BKaz5vxaEi1_*L{F%{-^LfAexzXt##A4Um+ppjImZBH*l7nM$M?$NEw_ST}YU)2h z`2;57{N&Kumlx8bCoaEK3&h@Nzc)R7Z~D$1pp+9_vhk~PUPW~HIe#;u;Iucn?Kzz5+b>ao%^!1LImL*!nL%UNXfzt?VdLP8O#lX-NyI|j z=XDIF)TZa(5&5bxv4hvqTSJ$YJLU7GVp!C9$Fk2KlslI%onGsz6%v8*Q&G{%u`Fv7 zqR)(ZOtQ~0R_n5wP4GR=AZ&gp>WvIs(A$I@+ase`v=je$voqv4sh@q|9Xl126LP|V z650h#CTP;=-2x{8$PWz^do#ul=`BA-BzJ(u7$Ir~zHUdDqY?H0!RnJx*#+4j?WRn` z!MC06F?1LiM&H|JiCD$AdQ2U9>^;<@ctw-D$Lhg@(Q|F5e>1StEb{S=25Mp(*ZQXg zwxj?f*~jC%6K=2POuHdIZ0?Z~V@{okQlDZ<3}Cl+%C2J}#&A9*Fg58jdc0?D4D6Id zf#Td|3G48`j-igEn|RH{YXlllQvX&mP#3@P}M$x3#&qmXYt?X`sv@ z*66B?AGkWoW+AAPc}h(YMUf=COEno{zoHjkKk5z}k#ahQ!-aU5 zJzkGB>FGarw$HfKV&YlAlXiKMs70UVf z^2+>Tv9YHwZI#Ol#pPQ0iE?q}Bln5ETc43vOXcF?LcY3KIGHc3tW=)1eB?QPbg{fz zDlQne9V^A^;z`eHsZy<$myhL-7LMhYE46%ixmH{$uGWeRjlTYCc6+UIe7=+~RIB-w QO07^U=9AgR-}Za! zzEf^uMFFEV<7S||1dy+gmzbN{_E0LjfPujTXaKWHL4I+`k@G8c85qnT03BgGagVaS z0s|vZEfCjmE{}`nxB1Gz&HMr=!thMmObbE(FJykftOVq9Fff5cfdHgWVX_?KMn<{G z7Z|5Zu3-|^oB$SOVCZ6C2D5a4G#60m1O^s{IG}nKAOz}rAvbvklRr=i+hj%NACnE3 zx%qj(Mz(-RAdugz!BWQP1Y~Vt@?bu~n#X3uc7$Drvx##FR}^;|j}^}vUIpGGd_sJy z_#^la2<#Gc6Wk%xBJ@KzLPSR7ofwzcBC!+V4GavMGuR{fHt!XS5ZElLGewwDVe%?_ u2S$d;j1H!gJsb{94sl#4EL@Ubnw$}zSWpmOlwXoqk{WM0nbS#~kpTdXT5IC~ diff --git a/lib/common/widgets/custom_icon.dart b/lib/common/widgets/custom_icon.dart index 6c31eff6c..e7c17d079 100644 --- a/lib/common/widgets/custom_icon.dart +++ b/lib/common/widgets/custom_icon.dart @@ -3,37 +3,43 @@ import 'package:flutter/widgets.dart'; class CustomIcons { - static const IconData coin = _CustomIconData(0xe800); - static const IconData dm_off = _CustomIconData(0xe801); - static const IconData dm_on = _CustomIconData(0xe802); - static const IconData dm_settings = _CustomIconData(0xe803); - static const IconData dyn = _CustomIconData(0xe804); - static const IconData fav = _CustomIconData(0xe805); - static const IconData flip_rotate_90 = _CustomIconData(0xe806); - static const IconData live_reserve = _CustomIconData(0xe807); - static const IconData open_in_full_rotate_45 = _CustomIconData(0xe808); - static const IconData player_dm_tip_back = _CustomIconData(0xe809); - static const IconData player_dm_tip_copy = _CustomIconData(0xe80a); - static const IconData player_dm_tip_like = _CustomIconData(0xe80b); - static const IconData player_dm_tip_like_solid = _CustomIconData(0xe80c); - static const IconData player_dm_tip_recall = _CustomIconData(0xe80d); - static const IconData repeat_rounded_rotate_90 = _CustomIconData(0xe80e); - static const IconData share = _CustomIconData(0xe80f); - static const IconData share_line = _CustomIconData(0xe810); - static const IconData share_node = _CustomIconData(0xe811); - static const IconData splitscreen_rotate_90 = _CustomIconData(0xe812); - static const IconData star_favorite_line = _CustomIconData(0xe813); - static const IconData star_favorite_solid = _CustomIconData(0xe814); - static const IconData thumbs_down = _CustomIconData(0xe815); - static const IconData thumbs_down_outline = _CustomIconData(0xe816); - static const IconData thumbs_up = _CustomIconData(0xe817); - static const IconData thumbs_up_fill = _CustomIconData(0xe818); - static const IconData thumbs_up_line = _CustomIconData(0xe819); - static const IconData thumbs_up_outline = _CustomIconData(0xe81a); - static const IconData topic_tag = _CustomIconData(0xe81b); - static const IconData touch_app_rotate_270 = _CustomIconData(0xe81c); - static const IconData view_headline_rotate_90 = _CustomIconData(0xe81d); - static const IconData watch_later = _CustomIconData(0xe81e); + static const IconData ai_circle = _CustomIconData(0xe800); + static const IconData coin = _CustomIconData(0xe801); + static const IconData dm_off = _CustomIconData(0xe802); + static const IconData dm_on = _CustomIconData(0xe803); + static const IconData dm_settings = _CustomIconData(0xe804); + static const IconData dyn = _CustomIconData(0xe805); + static const IconData fav = _CustomIconData(0xe806); + static const IconData flip_rotate_90 = _CustomIconData(0xe807); + static const IconData identifier_circle = _CustomIconData(0xe808); + static const IconData live_reserve = _CustomIconData(0xe809); + static const IconData open_in_full_rotate_45 = _CustomIconData(0xe80a); + static const IconData player_dm_tip_back = _CustomIconData(0xe80b); + static const IconData player_dm_tip_copy = _CustomIconData(0xe80c); + static const IconData player_dm_tip_like = _CustomIconData(0xe80d); + static const IconData player_dm_tip_like_solid = _CustomIconData(0xe80e); + static const IconData player_dm_tip_recall = _CustomIconData(0xe80f); + static const IconData repeat_rounded_rotate_90 = _CustomIconData(0xe810); + static const IconData share = _CustomIconData(0xe811); + static const IconData share_line = _CustomIconData(0xe812); + static const IconData share_node = _CustomIconData(0xe813); + static const IconData shield_play_arrow = _CustomIconData(0xe814); + static const IconData shield_published = _CustomIconData(0xe815); + static const IconData shield_reply = _CustomIconData(0xe816); + static const IconData shopping_bag_not_interested = _CustomIconData(0xe817); + static const IconData splitscreen_rotate_90 = _CustomIconData(0xe818); + static const IconData star_favorite_line = _CustomIconData(0xe819); + static const IconData star_favorite_solid = _CustomIconData(0xe81a); + static const IconData thumbs_down = _CustomIconData(0xe81b); + static const IconData thumbs_down_outline = _CustomIconData(0xe81c); + static const IconData thumbs_up = _CustomIconData(0xe81d); + static const IconData thumbs_up_fill = _CustomIconData(0xe81e); + static const IconData thumbs_up_line = _CustomIconData(0xe81f); + static const IconData thumbs_up_outline = _CustomIconData(0xe820); + static const IconData topic_tag = _CustomIconData(0xe821); + static const IconData touch_app_rotate_270 = _CustomIconData(0xe822); + static const IconData view_headline_rotate_90 = _CustomIconData(0xe823); + static const IconData watch_later = _CustomIconData(0xe824); } class _CustomIconData extends IconData { diff --git a/lib/common/widgets/video_popup_menu.dart b/lib/common/widgets/video_popup_menu.dart index 75deb6243..cde21a56f 100644 --- a/lib/common/widgets/video_popup_menu.dart +++ b/lib/common/widgets/video_popup_menu.dart @@ -1,3 +1,4 @@ +import 'package:PiliPlus/common/widgets/custom_icon.dart'; import 'package:PiliPlus/http/user.dart'; import 'package:PiliPlus/http/video.dart'; import 'package:PiliPlus/models/common/account_type.dart'; @@ -52,13 +53,7 @@ class VideoPopupMenu extends StatelessWidget { if (videoItem.bvid?.isNotEmpty == true) ...[ _VideoCustomAction( videoItem.bvid!, - const Stack( - clipBehavior: Clip.none, - children: [ - Icon(MdiIcons.identifier, size: 16), - Icon(MdiIcons.circleOutline, size: 16), - ], - ), + const Icon(CustomIcons.identifier_circle, size: 16), () => Utils.copyText(videoItem.bvid!), ), _VideoCustomAction( @@ -69,30 +64,7 @@ class VideoPopupMenu extends StatelessWidget { if (videoItem.cid != null && Pref.enableAi) _VideoCustomAction( 'AI总结', - const Stack( - alignment: Alignment.center, - clipBehavior: Clip.none, - children: [ - Icon(Icons.circle_outlined, size: 16), - ExcludeSemantics( - child: Text( - 'AI', - style: TextStyle( - fontSize: 10, - height: 1, - fontWeight: FontWeight.w700, - ), - strutStyle: StrutStyle( - fontSize: 10, - height: 1, - leading: 0, - fontWeight: FontWeight.w700, - ), - textScaler: TextScaler.noScaling, - ), - ), - ], - ), + const Icon(CustomIcons.ai_circle, size: 16), () async { final res = await UgcIntroController.getAiConclusion( videoItem.bvid!, diff --git a/lib/pages/dynamics/widgets/author_panel.dart b/lib/pages/dynamics/widgets/author_panel.dart index 8f32a5561..75f5a3de7 100644 --- a/lib/pages/dynamics/widgets/author_panel.dart +++ b/lib/pages/dynamics/widgets/author_panel.dart @@ -2,6 +2,7 @@ import 'dart:math'; import 'package:PiliPlus/common/assets.dart'; import 'package:PiliPlus/common/style.dart'; +import 'package:PiliPlus/common/widgets/custom_icon.dart'; import 'package:PiliPlus/common/widgets/dialog/report.dart'; import 'package:PiliPlus/common/widgets/extra_hit_test_widget.dart'; import 'package:PiliPlus/common/widgets/pendant_avatar.dart'; @@ -391,14 +392,7 @@ class AuthorPanel extends StatelessWidget { ); }, minLeadingWidth: 0, - leading: const Stack( - clipBehavior: Clip.none, - alignment: Alignment.center, - children: [ - Icon(Icons.shield_outlined, size: 19), - Icon(Icons.published_with_changes_sharp, size: 12), - ], - ), + leading: const Icon(CustomIcons.shield_published, size: 19), title: Text('检查动态', style: theme.textTheme.titleSmall!), ), if (onSetTop != null) diff --git a/lib/pages/member_search/child/widgets/search_archive_grpc.dart b/lib/pages/member_search/child/widgets/search_archive_grpc.dart index ff4098e52..13ab69ce3 100644 --- a/lib/pages/member_search/child/widgets/search_archive_grpc.dart +++ b/lib/pages/member_search/child/widgets/search_archive_grpc.dart @@ -1,5 +1,6 @@ import 'package:PiliPlus/common/style.dart'; import 'package:PiliPlus/common/widgets/badge.dart'; +import 'package:PiliPlus/common/widgets/custom_icon.dart'; import 'package:PiliPlus/common/widgets/flutter/layout_builder.dart'; import 'package:PiliPlus/common/widgets/image/image_save.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; @@ -132,13 +133,7 @@ class SearchArchiveGrpc extends StatelessWidget { child: Row( spacing: 6, children: [ - const Stack( - clipBehavior: Clip.none, - children: [ - Icon(MdiIcons.identifier, size: 16), - Icon(MdiIcons.circleOutline, size: 16), - ], - ), + const Icon(CustomIcons.identifier_circle, size: 16), Text(bvid, style: const TextStyle(fontSize: 13)), ], ), diff --git a/lib/pages/setting/models/extra_settings.dart b/lib/pages/setting/models/extra_settings.dart index ebebedda5..657c39af9 100644 --- a/lib/pages/setting/models/extra_settings.dart +++ b/lib/pages/setting/models/extra_settings.dart @@ -70,14 +70,7 @@ List get extraSettings => [ normalModel: const NormalModel.split( title: '空降助手', subtitle: '点击配置', - leading: Stack( - clipBehavior: Clip.none, - alignment: Alignment.center, - children: [ - Icon(Icons.shield_outlined), - Icon(Icons.play_arrow_rounded, size: 15), - ], - ), + leading: Icon(CustomIcons.shield_play_arrow), ), switchModel: SwitchModel.split( defaultVal: false, @@ -356,14 +349,7 @@ List get extraSettings => [ const SwitchModel( title: '发评反诈', subtitle: '发送评论后检查评论是否可见', - leading: Stack( - clipBehavior: Clip.none, - alignment: Alignment.center, - children: [ - Icon(Icons.shield_outlined), - Icon(Icons.reply, size: 14), - ], - ), + leading: Icon(CustomIcons.shield_reply), setKey: SettingBoxKey.enableCommAntifraud, defaultVal: false, ), @@ -380,41 +366,20 @@ List get extraSettings => [ const SwitchModel( title: '发布/转发动态反诈', subtitle: '发布/转发动态后检查动态是否可见', - leading: Stack( - clipBehavior: Clip.none, - alignment: Alignment.center, - children: [ - Icon(Icons.shield_outlined), - Icon(Icons.motion_photos_on, size: 12), - ], - ), + leading: Icon(CustomIcons.shield_published), setKey: SettingBoxKey.enableCreateDynAntifraud, defaultVal: false, ), SwitchModel( title: '屏蔽带货动态', - leading: const Stack( - clipBehavior: Clip.none, - alignment: Alignment.center, - children: [ - Icon(Icons.shopping_bag_outlined, size: 14), - Icon(Icons.not_interested), - ], - ), + leading: const Icon(CustomIcons.shopping_bag_not_interested), setKey: SettingBoxKey.antiGoodsDyn, defaultVal: false, onChanged: (value) => DynamicsDataModel.antiGoodsDyn = value, ), SwitchModel( title: '屏蔽带货评论', - leading: const Stack( - clipBehavior: Clip.none, - alignment: Alignment.center, - children: [ - Icon(Icons.shopping_bag_outlined, size: 14), - Icon(Icons.not_interested), - ], - ), + leading: const Icon(CustomIcons.shopping_bag_not_interested), setKey: SettingBoxKey.antiGoodsReply, defaultVal: false, onChanged: (value) => ReplyGrpc.antiGoodsReply = value, diff --git a/lib/pages/video/reply/widgets/reply_item_grpc.dart b/lib/pages/video/reply/widgets/reply_item_grpc.dart index 419c1b161..9b2918603 100644 --- a/lib/pages/video/reply/widgets/reply_item_grpc.dart +++ b/lib/pages/video/reply/widgets/reply_item_grpc.dart @@ -4,6 +4,7 @@ import 'package:PiliPlus/common/assets.dart'; import 'package:PiliPlus/common/constants.dart'; import 'package:PiliPlus/common/style.dart'; import 'package:PiliPlus/common/widgets/badge.dart'; +import 'package:PiliPlus/common/widgets/custom_icon.dart'; import 'package:PiliPlus/common/widgets/dialog/report.dart'; import 'package:PiliPlus/common/widgets/extra_hit_test_widget.dart'; import 'package:PiliPlus/common/widgets/flutter/text/text.dart' as custom_text; @@ -1093,14 +1094,7 @@ class ReplyItemGrpc extends StatelessWidget { onCheckReply?.call(item); }, minLeadingWidth: 0, - leading: const Stack( - clipBehavior: Clip.none, - alignment: Alignment.center, - children: [ - Icon(Icons.shield_outlined, size: 19), - Icon(Icons.reply, size: 12), - ], - ), + leading: const Icon(CustomIcons.shield_reply, size: 19), title: Text('检查评论', style: style), ), ], diff --git a/lib/pages/video/widgets/header_control.dart b/lib/pages/video/widgets/header_control.dart index e80e8ba58..8a645007a 100644 --- a/lib/pages/video/widgets/header_control.dart +++ b/lib/pages/video/widgets/header_control.dart @@ -1843,21 +1843,10 @@ class HeaderControlState extends State tooltip: '提交片段', style: btnStyle, onPressed: () => videoDetailCtr.onBlock(context), - icon: const Stack( - clipBehavior: Clip.none, - alignment: Alignment.center, - children: [ - Icon( - Icons.shield_outlined, - size: 19, - color: Colors.white, - ), - Icon( - Icons.play_arrow_rounded, - size: 13, - color: Colors.white, - ), - ], + icon: const Icon( + CustomIcons.shield_play_arrow, + size: 20, + color: Colors.white, ), ), ),