From ab4c246675283c88b66ced357a83f41a910e220a Mon Sep 17 00:00:00 2001 From: Zhou Weidong <502333560@qq.com> Date: Mon, 26 Oct 2026 15:44:28 +0800 Subject: [PATCH] =?UTF-8?q?fix(player):=20=E4=BF=9D=E6=8C=81=E6=8E=A8?= =?UTF-8?q?=E8=8D=90=E9=A1=B5=E8=BF=94=E5=9B=9E=E6=97=B6=E6=92=AD=E6=94=BE?= =?UTF-8?q?=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/pages/recommend/recommend_page.dart | 7 ++++- test/player/player_fullscreen_test.dart | 42 +++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/lib/pages/recommend/recommend_page.dart b/lib/pages/recommend/recommend_page.dart index 4f29b3a..d6f0967 100644 --- a/lib/pages/recommend/recommend_page.dart +++ b/lib/pages/recommend/recommend_page.dart @@ -46,11 +46,15 @@ class RecommendPage extends StatefulWidget { State createState() => _RecommendPageState(); } -class _RecommendPageState extends State { +class _RecommendPageState extends State + with AutomaticKeepAliveClientMixin { RecommendInnerTab _tab = RecommendInnerTab.feed; final PageController _pageController = PageController(); int _scrubCancelRequest = 0; + @override + bool get wantKeepAlive => true; + @override void initState() { super.initState(); @@ -85,6 +89,7 @@ class _RecommendPageState extends State { @override Widget build(BuildContext context) { + super.build(context); final categories = context.read(); return ColoredBox( key: const Key('recommend-page'), diff --git a/test/player/player_fullscreen_test.dart b/test/player/player_fullscreen_test.dart index 68d6622..34a1fc7 100644 --- a/test/player/player_fullscreen_test.dart +++ b/test/player/player_fullscreen_test.dart @@ -21,6 +21,7 @@ import 'package:fruitshorts/core/theme/app_colors.dart'; import 'package:fruitshorts/pages/auth/auth_view.dart'; import 'package:fruitshorts/pages/player/player_view.dart'; import 'package:fruitshorts/pages/player/widgets/player_center_toggle.dart'; +import 'package:fruitshorts/pages/player/widgets/player_render_stack.dart'; import 'package:fruitshorts/pages/player/widgets/seek_progress_bar.dart'; import '../support/fake_catalog.dart'; @@ -82,6 +83,47 @@ void main() { _expectPlayerNavigationBar(tester); }); + testWidgets('should_preserve_recommend_feed_when_full_player_pops', ( + tester, + ) async { + await _pumpApp(tester); + await tester.tap(find.byKey(const Key('tab-recommend'))); + await tester.pumpAndSettle(); + + final recommendPlayer = find.byKey( + const Key('recommend-feed-player'), + ); + final renderStack = find.descendant( + of: recommendPlayer, + matching: find.byType(PlayerRenderStack), + ); + expect(recommendPlayer, findsOneWidget); + expect(renderStack, findsOneWidget); + final playerState = tester.state(recommendPlayer); + final renderState = tester.state(renderStack); + + await tester.tap(find.byKey(const Key('home-feed-full-series'))); + await tester.pumpAndSettle(); + expect( + tester.widget(find.byType(PlayerPage).last).homeMode, + isFalse, + ); + + tester.state(find.byType(Navigator).first).pop(); + await tester.pump(); + + expect(find.byKey(const Key('recommend-page')), findsOneWidget); + expect(recommendPlayer, findsOneWidget); + expect(renderStack, findsOneWidget); + expect(tester.state(recommendPlayer), same(playerState)); + expect(tester.state(renderStack), same(renderState)); + expect(find.byKey(const Key('recommend-feed-skeleton')), findsNothing); + + await tester.pumpAndSettle(); + expect(tester.state(recommendPlayer), same(playerState)); + expect(tester.state(renderStack), same(renderState)); + }); + testWidgets('should_render_player_loading_indicators_at_compact_size', ( tester, ) async {