From 02763c3dfbe70be02492e70974894682055c4d42 Mon Sep 17 00:00:00 2001 From: Zhou Weidong <502333560@qq.com> Date: Tue, 20 Oct 2026 12:24:37 +0800 Subject: [PATCH] =?UTF-8?q?fix(flutter):=20=E7=AE=80=E4=BB=8B=E7=81=B0?= =?UTF-8?q?=E5=AD=97=E7=BB=9F=E4=B8=80=E5=B9=B6=E9=80=8F=E6=98=8E=E6=9A=82?= =?UTF-8?q?=E5=81=9C=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../player/widgets/player_center_toggle.dart | 6 +---- .../player/widgets/player_overlay_parts.dart | 25 +++++++------------ test/player/player_center_toggle_test.dart | 8 +++--- test/player/player_fullscreen_test.dart | 24 ++++++++++++++++++ 4 files changed, 38 insertions(+), 25 deletions(-) diff --git a/lib/pages/player/widgets/player_center_toggle.dart b/lib/pages/player/widgets/player_center_toggle.dart index c939301..c0bd4d5 100644 --- a/lib/pages/player/widgets/player_center_toggle.dart +++ b/lib/pages/player/widgets/player_center_toggle.dart @@ -22,13 +22,9 @@ class PlayerCenterToggle extends StatelessWidget { label: playing ? 'Pause' : 'Play', child: GestureDetector( onTap: onTap, - child: Container( + child: SizedBox( width: 52, height: 52, - decoration: const BoxDecoration( - color: AppColors.blue, - shape: BoxShape.circle, - ), child: Icon( playing ? Icons.pause_rounded : Icons.play_arrow_rounded, color: AppColors.onPrimary, diff --git a/lib/pages/player/widgets/player_overlay_parts.dart b/lib/pages/player/widgets/player_overlay_parts.dart index a849d67..c78b216 100644 --- a/lib/pages/player/widgets/player_overlay_parts.dart +++ b/lib/pages/player/widgets/player_overlay_parts.dart @@ -241,16 +241,11 @@ class _EpisodeSynopsis extends StatefulWidget { class _EpisodeSynopsisState extends State<_EpisodeSynopsis> { bool _expanded = false; - static const TextStyle _labelStyle = TextStyle( - color: AppColors.onPrimary, - fontSize: 12, - fontWeight: FontWeight.w700, - shadows: _playerTextShadows, - ); - - static const TextStyle _synopsisStyle = TextStyle( + /// 「第 n 集」、分隔符与简介正文共用同一套灰字规格。 + static const TextStyle _lineStyle = TextStyle( color: AppColors.playerMuted, fontSize: 12, + fontWeight: FontWeight.w500, height: 1.35, shadows: _playerTextShadows, ); @@ -270,17 +265,15 @@ class _EpisodeSynopsisState extends State<_EpisodeSynopsis> { key: const Key('player-episode-label'), maxLines: 1, overflow: TextOverflow.ellipsis, - style: _labelStyle, + style: _lineStyle, ), - const Padding( - padding: EdgeInsets.symmetric(horizontal: 6), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 6), child: Text( '|', maxLines: 1, - style: TextStyle( - color: Colors.white54, - fontSize: 12, - shadows: _playerTextShadows, + style: _lineStyle.copyWith( + color: AppColors.playerMuted.withValues(alpha: 0.6), ), ), ), @@ -290,7 +283,7 @@ class _EpisodeSynopsisState extends State<_EpisodeSynopsis> { key: const Key('player-synopsis'), maxLines: _expanded ? null : 1, overflow: _expanded ? TextOverflow.clip : TextOverflow.ellipsis, - style: _synopsisStyle, + style: _lineStyle, ), ), if (!_expanded) _toggle(widget.l10n.expandSynopsis), diff --git a/test/player/player_center_toggle_test.dart b/test/player/player_center_toggle_test.dart index dec5deb..3c5e670 100644 --- a/test/player/player_center_toggle_test.dart +++ b/test/player/player_center_toggle_test.dart @@ -33,16 +33,16 @@ void main() { Key('player-play-toggle'), ]) { expect(tester.getSize(find.byKey(key)), const Size(52, 52)); - final container = tester.widget( + // 暂停按钮改为透明背景,容器已不再绘制任何底色或装饰。 + expect( find.descendant(of: find.byKey(key), matching: find.byType(Container)), + findsNothing, ); - final decoration = container.decoration! as BoxDecoration; - expect(decoration.color, AppColors.blue); - expect(decoration.shape, BoxShape.circle); final icon = tester.widget( find.descendant(of: find.byKey(key), matching: find.byType(Icon)), ); expect(icon.size, 26); + expect(icon.color, AppColors.onPrimary); } }); } diff --git a/test/player/player_fullscreen_test.dart b/test/player/player_fullscreen_test.dart index 9a938f0..7ce34cd 100644 --- a/test/player/player_fullscreen_test.dart +++ b/test/player/player_fullscreen_test.dart @@ -380,6 +380,30 @@ void main() { expect(tester.widget(synopsis).maxLines, 1); }); + testWidgets('should_share_one_muted_style_across_label_and_synopsis', ( + tester, + ) async { + await _pumpApp(tester); + await _openSeriesPlayer(tester); + + TextStyle styleOf(Finder finder) => + tester.widget(finder).style ?? const TextStyle(); + final label = styleOf(find.byKey(const Key('player-episode-label'))); + final synopsis = styleOf(find.byKey(const Key('player-synopsis'))); + final separator = styleOf( + find.descendant( + of: find.byKey(const Key('player-episode-synopsis')), + matching: find.text('|'), + ), + ); + for (final style in [label, synopsis, separator]) { + expect(style.fontSize, 12); + expect(style.fontWeight, FontWeight.w500); + expect(style.color?.withValues(alpha: 1), AppColors.playerMuted); + } + expect(separator.color, isNot(Colors.white)); + }); + testWidgets('should_fit_long_title_and_synopsis_at_320_width', ( tester, ) async {