From a2da381f1a1c1fd48578268fcbc129a0306ba281 Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Mon, 19 May 2025 20:09:49 +0800 Subject: [PATCH] opt icon Signed-off-by: bggRGjQaUbCoE --- assets/fonts/custom_icon.ttf | Bin 0 -> 9636 bytes lib/common/widgets/custom_icon.dart | 29 ++++++++++++++++++ lib/pages/dynamics/widgets/content_panel.dart | 23 +++++++++++--- lib/pages/dynamics/widgets/forward_panel.dart | 26 +++++++++++++--- lib/pages/video/view.dart | 19 +++++------- pubspec.yaml | 3 ++ 6 files changed, 81 insertions(+), 19 deletions(-) create mode 100644 assets/fonts/custom_icon.ttf create mode 100644 lib/common/widgets/custom_icon.dart diff --git a/assets/fonts/custom_icon.ttf b/assets/fonts/custom_icon.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a95e03e957a2611e9ef6926cddc7cf92b7c6c9a8 GIT binary patch literal 9636 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 s-CCb^dHr}$bbMeYD{72E+7Hs%G0X>t>JOBUy literal 0 HcmV?d00001 diff --git a/lib/common/widgets/custom_icon.dart b/lib/common/widgets/custom_icon.dart new file mode 100644 index 000000000..aaa163c63 --- /dev/null +++ b/lib/common/widgets/custom_icon.dart @@ -0,0 +1,29 @@ +// ignore_for_file: constant_identifier_names + +import 'package:flutter/widgets.dart'; + +class CustomIcon { + static const _kFontFam = 'custom_icon'; + + static const IconData coin = IconData(0xe800, fontFamily: _kFontFam); + static const IconData dm_off = IconData(0xe801, fontFamily: _kFontFam); + static const IconData dm_on = IconData(0xe802, fontFamily: _kFontFam); + static const IconData dm_settings = IconData(0xe803, fontFamily: _kFontFam); + static const IconData dyn = IconData(0xe804, fontFamily: _kFontFam); + static const IconData fav = IconData(0xe805, fontFamily: _kFontFam); + static const IconData share = IconData(0xe806, fontFamily: _kFontFam); + static const IconData share_line = IconData(0xe807, fontFamily: _kFontFam); + static const IconData share_node = IconData(0xe808, fontFamily: _kFontFam); + static const IconData star_favorite_line = + IconData(0xe809, fontFamily: _kFontFam); + static const IconData thumbs_down = IconData(0xe80a, fontFamily: _kFontFam); + static const IconData thumbs_down_outline = + IconData(0xe80b, fontFamily: _kFontFam); + static const IconData thumbs_up = IconData(0xe80c, fontFamily: _kFontFam); + static const IconData thumbs_up_line = + IconData(0xe80d, fontFamily: _kFontFam); + static const IconData thumbs_up_outline = + IconData(0xe80e, fontFamily: _kFontFam); + static const IconData topic_tag = IconData(0xe80f, fontFamily: _kFontFam); + static const IconData watch_later = IconData(0xe810, fontFamily: _kFontFam); +} diff --git a/lib/pages/dynamics/widgets/content_panel.dart b/lib/pages/dynamics/widgets/content_panel.dart index 4998a2c80..e4ccaf97d 100644 --- a/lib/pages/dynamics/widgets/content_panel.dart +++ b/lib/pages/dynamics/widgets/content_panel.dart @@ -1,4 +1,5 @@ // 内容 +import 'package:PiliPlus/common/widgets/custom_icon.dart'; import 'package:PiliPlus/common/widgets/image/image_view.dart'; import 'package:PiliPlus/models/dynamics/result.dart'; import 'package:PiliPlus/pages/dynamics/widgets/rich_node_panel.dart'; @@ -44,7 +45,7 @@ Widget content( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - if (item.modules.moduleDynamic?.topic != null) ...[ + if (item.modules.moduleDynamic?.topic != null) GestureDetector( onTap: () { Get.toNamed( @@ -55,15 +56,29 @@ Widget content( }, ); }, - child: Text( - '#${item.modules.moduleDynamic!.topic!.name}', + child: Text.rich( + TextSpan( + children: [ + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: Padding( + padding: const EdgeInsets.only(right: 4), + child: Icon( + size: 18, + CustomIcon.topic_tag, + color: theme.colorScheme.primary, + ), + ), + ), + TextSpan(text: item.modules.moduleDynamic!.topic!.name), + ], + ), style: TextStyle( fontSize: source == 'detail' && !isSave ? 16 : 15, color: theme.colorScheme.primary, ), ), ), - ], if (richNodes != null) source == 'detail' ? SelectableText.rich( diff --git a/lib/pages/dynamics/widgets/forward_panel.dart b/lib/pages/dynamics/widgets/forward_panel.dart index 22603e5ea..f893e4946 100644 --- a/lib/pages/dynamics/widgets/forward_panel.dart +++ b/lib/pages/dynamics/widgets/forward_panel.dart @@ -1,5 +1,6 @@ // 转发 import 'package:PiliPlus/common/widgets/badge.dart'; +import 'package:PiliPlus/common/widgets/custom_icon.dart'; import 'package:PiliPlus/common/widgets/image/image_save.dart'; import 'package:PiliPlus/common/widgets/image/image_view.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; @@ -92,8 +93,8 @@ Widget forWard( ), ], ), - const SizedBox(height: 2), - if (item.modules.moduleDynamic?.topic != null) + const SizedBox(height: 5), + if (item.modules.moduleDynamic?.topic != null) ...[ GestureDetector( onTap: () { Get.toNamed( @@ -104,11 +105,28 @@ Widget forWard( }, ); }, - child: Text( - '#${item.modules.moduleDynamic!.topic!.name}', + child: Text.rich( + TextSpan( + children: [ + WidgetSpan( + alignment: PlaceholderAlignment.bottom, + child: Padding( + padding: const EdgeInsets.only(right: 4), + child: Icon( + size: 18, + CustomIcon.topic_tag, + color: theme.colorScheme.primary, + ), + ), + ), + TextSpan(text: item.modules.moduleDynamic!.topic!.name), + ], + ), style: TextStyle(color: theme.colorScheme.primary), ), ), + const SizedBox(height: 5), + ], if (richNodes != null) Text.rich( richNodes, diff --git a/lib/pages/video/view.dart b/lib/pages/video/view.dart index 45900ebf6..2fa063a53 100644 --- a/lib/pages/video/view.dart +++ b/lib/pages/video/view.dart @@ -4,6 +4,7 @@ import 'dart:math'; import 'dart:ui'; import 'package:PiliPlus/common/constants.dart'; +import 'package:PiliPlus/common/widgets/custom_icon.dart'; import 'package:PiliPlus/common/widgets/scroll_physics.dart'; import 'package:PiliPlus/grpc/bilibili/main/community/reply/v1.pb.dart' show ReplyInfo; @@ -56,7 +57,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; -import 'package:flutter_svg/svg.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:get/get.dart'; import 'package:hive/hive.dart'; @@ -1590,18 +1590,15 @@ class _VideoDetailPageVState extends State videoDetailController .plPlayerController.isOpenDanmu.value); }, - icon: SvgPicture.asset( + icon: Icon( videoDetailController .plPlayerController.isOpenDanmu.value - ? 'assets/images/video/danmu_open.svg' - : 'assets/images/video/danmu_close.svg', - colorFilter: ColorFilter.mode( - videoDetailController - .plPlayerController.isOpenDanmu.value - ? themeData.colorScheme.secondary - : themeData.colorScheme.outline, - BlendMode.srcIn, - ), + ? CustomIcon.dm_on + : CustomIcon.dm_off, + color: videoDetailController + .plPlayerController.isOpenDanmu.value + ? themeData.colorScheme.secondary + : themeData.colorScheme.outline, ), ), ), diff --git a/pubspec.yaml b/pubspec.yaml index a3d711bf6..507c5c950 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -285,6 +285,9 @@ flutter: - family: digital_id_num fonts: - asset: assets/fonts/digital_id_num.ttf + - family: custom_icon + fonts: + - asset: assets/fonts/custom_icon.ttf # - family: Jura-Bold # fonts: # - asset: assets/fonts/Jura-Bold.ttf