fix(player): 隔离播放资源所有权并修复黑屏
This commit is contained in:
1 parent
54eb5a60a8
commit
bb2c729a7e
9 files changed
+223
-25
No files matched your search
@@ -32,6 +32,68 @@ void main() {
|
||||
await session.close();
|
||||
});
|
||||
|
||||
test('should_not_retire_home_controller_when_player_switches_episodes', () async {
|
||||
final factory = FakeFactory();
|
||||
final home = PlaybackSession(
|
||||
episodes: episodes,
|
||||
factory: factory.create,
|
||||
canPlay: (episode) => episode.isFree,
|
||||
owner: PlaybackSessionOwner.home,
|
||||
);
|
||||
await home.select(0, preloadIndex: 1);
|
||||
await home.preloadSettled;
|
||||
final homePlayer = home.active;
|
||||
expect(homePlayer, isNotNull);
|
||||
|
||||
final player = PlaybackSession(
|
||||
episodes: episodes,
|
||||
factory: factory.create,
|
||||
canPlay: (episode) => episode.isFree,
|
||||
owner: PlaybackSessionOwner.player,
|
||||
);
|
||||
await player.select(0, preloadIndex: 1);
|
||||
await player.select(1, previousIndex: 0);
|
||||
await player.preloadSettled;
|
||||
|
||||
expect(home.active, same(homePlayer));
|
||||
expect(
|
||||
factory.created
|
||||
.firstWhere((candidate) => identical(candidate, homePlayer))
|
||||
.disposed,
|
||||
isFalse,
|
||||
);
|
||||
expect(player.active, isNot(same(homePlayer)));
|
||||
await player.close();
|
||||
await home.close();
|
||||
});
|
||||
|
||||
test('should_keep_home_controller_alive_when_player_session_closes', () async {
|
||||
final factory = FakeFactory();
|
||||
final home = PlaybackSession(
|
||||
episodes: episodes,
|
||||
factory: factory.create,
|
||||
canPlay: (episode) => episode.isFree,
|
||||
owner: PlaybackSessionOwner.home,
|
||||
);
|
||||
await home.select(0);
|
||||
final homePlayer = home.active! as FakePlayer;
|
||||
|
||||
final player = PlaybackSession(
|
||||
episodes: episodes,
|
||||
factory: factory.create,
|
||||
canPlay: (episode) => episode.isFree,
|
||||
owner: PlaybackSessionOwner.player,
|
||||
);
|
||||
await player.select(0);
|
||||
await player.select(1);
|
||||
await player.close();
|
||||
|
||||
expect(homePlayer.disposed, isFalse);
|
||||
expect(home.active, same(homePlayer));
|
||||
expect(home.currentIndex, 0);
|
||||
await home.close();
|
||||
});
|
||||
|
||||
test('should_release_previous_player_immediately_when_selecting_locked', () async {
|
||||
final lockedEpisodes = [
|
||||
Episode(
|
||||
|
||||
Reference in new issue
Block a user