fix(player): 保持推荐页返回时播放状态
This commit is contained in:
1 parent
2a32dec183
commit
ab4c246675
2 files changed
+48
-1
No files matched your search
@@ -46,11 +46,15 @@ class RecommendPage extends StatefulWidget {
|
|||||||
State<RecommendPage> createState() => _RecommendPageState();
|
State<RecommendPage> createState() => _RecommendPageState();
|
||||||
}
|
}
|
||||||
|
|
||||||
class _RecommendPageState extends State<RecommendPage> {
|
class _RecommendPageState extends State<RecommendPage>
|
||||||
|
with AutomaticKeepAliveClientMixin<RecommendPage> {
|
||||||
RecommendInnerTab _tab = RecommendInnerTab.feed;
|
RecommendInnerTab _tab = RecommendInnerTab.feed;
|
||||||
final PageController _pageController = PageController();
|
final PageController _pageController = PageController();
|
||||||
int _scrubCancelRequest = 0;
|
int _scrubCancelRequest = 0;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool get wantKeepAlive => true;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
@@ -85,6 +89,7 @@ class _RecommendPageState extends State<RecommendPage> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
super.build(context);
|
||||||
final categories = context.read<CategoryController>();
|
final categories = context.read<CategoryController>();
|
||||||
return ColoredBox(
|
return ColoredBox(
|
||||||
key: const Key('recommend-page'),
|
key: const Key('recommend-page'),
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import 'package:fruitshorts/core/theme/app_colors.dart';
|
|||||||
import 'package:fruitshorts/pages/auth/auth_view.dart';
|
import 'package:fruitshorts/pages/auth/auth_view.dart';
|
||||||
import 'package:fruitshorts/pages/player/player_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_center_toggle.dart';
|
||||||
|
import 'package:fruitshorts/pages/player/widgets/player_render_stack.dart';
|
||||||
import 'package:fruitshorts/pages/player/widgets/seek_progress_bar.dart';
|
import 'package:fruitshorts/pages/player/widgets/seek_progress_bar.dart';
|
||||||
|
|
||||||
import '../support/fake_catalog.dart';
|
import '../support/fake_catalog.dart';
|
||||||
@@ -82,6 +83,47 @@ void main() {
|
|||||||
_expectPlayerNavigationBar(tester);
|
_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', (
|
testWidgets('should_render_player_loading_indicators_at_compact_size', (
|
||||||
tester,
|
tester,
|
||||||
) async {
|
) async {
|
||||||
|
|||||||
Reference in new issue
Block a user