fix(player): 保持推荐页返回时播放状态

This commit is contained in:
Zhou Weidong committed 2026-10-26 15:44:28 +08:00
1 parent 2a32dec183
commit ab4c246675
2 files changed
+48 -1

No files matched your search

+6 -1
View File
@@ -46,11 +46,15 @@ class RecommendPage extends StatefulWidget {
State<RecommendPage> createState() => _RecommendPageState();
}
class _RecommendPageState extends State<RecommendPage> {
class _RecommendPageState extends State<RecommendPage>
with AutomaticKeepAliveClientMixin<RecommendPage> {
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<RecommendPage> {
@override
Widget build(BuildContext context) {
super.build(context);
final categories = context.read<CategoryController>();
return ColoredBox(
key: const Key('recommend-page'),
+42
View File
@@ -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<PlayerPage>(find.byType(PlayerPage).last).homeMode,
isFalse,
);
tester.state<NavigatorState>(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 {