diff --git a/lib/pages/player/widgets/home_feed_overlay.dart b/lib/pages/player/widgets/home_feed_overlay.dart index b4c96ec..dc10f8b 100644 --- a/lib/pages/player/widgets/home_feed_overlay.dart +++ b/lib/pages/player/widgets/home_feed_overlay.dart @@ -273,7 +273,6 @@ class _HomeFeedOverlayState extends State { onSave: widget.onSave, onLike: widget.onLike, onComments: widget.onComments, - onShare: widget.onShare, onEpisodes: widget.onEpisodes ?? widget.onOpenFullPlayer, ); } diff --git a/lib/pages/player/widgets/home_feed_recommend_panel.dart b/lib/pages/player/widgets/home_feed_recommend_panel.dart index 07f08da..56c049f 100644 --- a/lib/pages/player/widgets/home_feed_recommend_panel.dart +++ b/lib/pages/player/widgets/home_feed_recommend_panel.dart @@ -305,7 +305,6 @@ class HomeFeedActionRail extends StatelessWidget { required this.onSave, required this.onLike, required this.onComments, - required this.onShare, required this.onEpisodes, this.favoriteCount, this.likeCount, @@ -320,13 +319,13 @@ class HomeFeedActionRail extends StatelessWidget { final VoidCallback onSave; final VoidCallback onLike; final VoidCallback onComments; - final VoidCallback onShare; final VoidCallback onEpisodes; @override Widget build(BuildContext context) { final l10n = AppLocalizations.of(context)!; return InteractionRail( + itemGap: 14, items: [ InteractionRailItem( key: const Key('rail-save'), @@ -337,14 +336,6 @@ class HomeFeedActionRail extends StatelessWidget { selected: saved, onTap: onSave, ), - InteractionRailItem( - key: const Key('rail-comments'), - asset: 'assets/icon/rail/rail_comment.png', - label: l10n.comments, - count: commentCount, - countKey: const Key('rail-comments-count'), - onTap: onComments, - ), InteractionRailItem( key: const Key('rail-like'), asset: 'assets/icon/rail/rail_like.png', @@ -356,10 +347,12 @@ class HomeFeedActionRail extends StatelessWidget { onTap: onLike, ), InteractionRailItem( - key: const Key('rail-share'), - asset: 'assets/icon/rail/rail_share.png', - label: l10n.share, - onTap: onShare, + key: const Key('rail-comments'), + asset: 'assets/icon/rail/rail_comment.png', + label: l10n.comments, + count: commentCount, + countKey: const Key('rail-comments-count'), + onTap: onComments, ), InteractionRailItem( key: const Key('rail-episodes'), diff --git a/lib/pages/player/widgets/interaction_rail.dart b/lib/pages/player/widgets/interaction_rail.dart index 40af975..38f1369 100644 --- a/lib/pages/player/widgets/interaction_rail.dart +++ b/lib/pages/player/widgets/interaction_rail.dart @@ -7,7 +7,7 @@ import '../../../core/theme/app_colors.dart'; const double _buttonSize = 44; const double _iconSize = 32; -const double _itemGap = 24; +const double _defaultItemGap = 24; /// 互动栏单项:图标、计数与点击。 class InteractionRailItem { @@ -36,9 +36,14 @@ class InteractionRailItem { /// 播放页与首页 feed 共用的右侧互动栏:收藏/评论/喜欢/分享。 class InteractionRail extends StatelessWidget { - const InteractionRail({super.key, required this.items}); + const InteractionRail({ + super.key, + required this.items, + this.itemGap = _defaultItemGap, + }); final List items; + final double itemGap; @override Widget build(BuildContext context) { @@ -46,7 +51,7 @@ class InteractionRail extends StatelessWidget { mainAxisSize: MainAxisSize.min, children: [ for (var index = 0; index < items.length; index++) ...[ - if (index > 0) const SizedBox(height: _itemGap), + if (index > 0) SizedBox(height: itemGap), _RailButton(item: items[index]), ], ], diff --git a/test/home/home_preview_layout_test.dart b/test/home/home_preview_layout_test.dart index 3835d74..4d5c62f 100644 --- a/test/home/home_preview_layout_test.dart +++ b/test/home/home_preview_layout_test.dart @@ -346,7 +346,7 @@ void main() { ); expect(saveImage.color, AppColors.onPrimary); expect(find.byKey(const Key('rail-comments')), findsOneWidget); - expect(find.byKey(const Key('rail-share')), findsOneWidget); + expect(find.byKey(const Key('rail-share')), findsNothing); expect( tester.widget(find.byKey(const Key('rail-comments-count'))).data, '12', @@ -364,19 +364,6 @@ void main() { .assetName, 'assets/icon/rail/rail_comment.png', ); - expect( - (tester - .widget( - find.descendant( - of: find.byKey(const Key('rail-share')), - matching: find.byType(Image), - ), - ) - .image - as AssetImage) - .assetName, - 'assets/icon/rail/rail_share.png', - ); expect(find.byKey(const Key('rail-episodes')), findsOneWidget); expect( find.descendant( @@ -385,6 +372,13 @@ void main() { ), findsOneWidget, ); + final saveRect = tester.getRect(find.byKey(const Key('rail-save'))); + final likeRect = tester.getRect(find.byKey(const Key('rail-like'))); + final commentsRect = tester.getRect(find.byKey(const Key('rail-comments'))); + final episodesRect = tester.getRect(find.byKey(const Key('rail-episodes'))); + expect(likeRect.top - saveRect.bottom, closeTo(14, 0.1)); + expect(commentsRect.top - likeRect.bottom, closeTo(14, 0.1)); + expect(episodesRect.top - commentsRect.bottom, closeTo(14, 0.1)); expect( tester.getRect(find.byKey(const Key('home-feed-action-rail'))).right, closeTo( diff --git a/test/player/player_fullscreen_test.dart b/test/player/player_fullscreen_test.dart index c71fbb6..dbf9662 100644 --- a/test/player/player_fullscreen_test.dart +++ b/test/player/player_fullscreen_test.dart @@ -1351,6 +1351,17 @@ void main() { expect(shareImage.width, 32); expect(shareImage.height, 32); expect(shareImage.colorBlendMode, BlendMode.srcIn); + final saveRect = tester.getRect(find.byKey(const Key('player-rail-save'))); + final commentsRect = tester.getRect( + find.byKey(const Key('player-rail-comments')), + ); + final likeRect = tester.getRect(find.byKey(const Key('player-rail-like'))); + final shareRect = tester.getRect( + find.byKey(const Key('player-rail-share')), + ); + expect(commentsRect.top - saveRect.bottom, closeTo(24, 0.1)); + expect(likeRect.top - commentsRect.bottom, closeTo(24, 0.1)); + expect(shareRect.top - likeRect.bottom, closeTo(24, 0.1)); final saveButton = tester.widget( find.descendant(