fix(player): 观看全集复用抓帧首屏
This commit is contained in:
1 parent
4d3d067f77
commit
55fc2796a9
4 files changed
+136
-36
No files matched your search
@@ -246,6 +246,34 @@ void main() {
|
||||
expect(find.byKey(const Key('home-tabs-bar')), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('should_capture_feed_frame_when_opening_series_from_picker', (
|
||||
tester,
|
||||
) async {
|
||||
final factory = _RouteVideoFactory();
|
||||
await _pumpApp(tester, playerFactory: factory.create);
|
||||
await tester.tap(find.byKey(const Key('tab-recommend')));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
await tester.tap(find.byKey(const Key('rail-episodes')));
|
||||
await tester.pumpAndSettle();
|
||||
await tester.tap(find.byKey(const Key('player-episode-2')));
|
||||
await _waitForRevealedPlayerEntry(tester);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
final player = find.byWidgetPredicate(
|
||||
(widget) => widget is PlayerPage && widget.revealAfterFirstFrame,
|
||||
);
|
||||
expect(player, findsOneWidget);
|
||||
final playerWidget = tester.widget<PlayerPage>(player);
|
||||
expect(playerWidget.initialFrameBytes, isNotNull);
|
||||
expect(playerWidget.revealAfterFirstFrame, isTrue);
|
||||
expect(playerWidget.initialIndex, 1);
|
||||
|
||||
await tester.tap(find.byKey(const Key('player-back')));
|
||||
await tester.pumpAndSettle();
|
||||
expect(find.byKey(const Key('recommend-page')), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('should_keep_drama_and_episode_indices_separate', (tester) async {
|
||||
final factory = _RouteVideoFactory();
|
||||
await _pumpApp(tester, playerFactory: factory.create);
|
||||
@@ -1675,6 +1703,24 @@ Future<void> _waitForFullPlayerEntry(WidgetTester tester) async {
|
||||
fail('full player route was not pushed after frame capture');
|
||||
}
|
||||
|
||||
Future<void> _waitForRevealedPlayerEntry(WidgetTester tester) async {
|
||||
for (var attempt = 0; attempt < 120; attempt++) {
|
||||
await tester.runAsync(
|
||||
() => Future<void>.delayed(const Duration(milliseconds: 10)),
|
||||
);
|
||||
await tester.pump(const Duration(milliseconds: 16));
|
||||
if (find
|
||||
.byWidgetPredicate(
|
||||
(widget) => widget is PlayerPage && widget.revealAfterFirstFrame,
|
||||
)
|
||||
.evaluate()
|
||||
.isNotEmpty) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
fail('revealed player route was not pushed after frame capture');
|
||||
}
|
||||
|
||||
class _RouteVideoFactory {
|
||||
final List<_RouteVideoPlayer> created = [];
|
||||
final List<Episode> episodes = [];
|
||||
|
||||
Reference in new issue
Block a user