fix: 多层播放页快速返回首页致后台播放、通知未消失

This commit is contained in:
orz12
2024-06-01 12:06:50 +08:00
parent 8df87556b7
commit 62e0a0c588
4 changed files with 113 additions and 35 deletions

View File

@@ -1,4 +1,6 @@
import 'package:PiliPalaX/models/danmaku/dm.pb.dart';
import 'package:audio_service/audio_service.dart';
import 'package:flutter/cupertino.dart';
import 'package:hive/hive.dart';
import 'package:PiliPalaX/models/bangumi/info.dart';
import 'package:PiliPalaX/models/video_detail_res.dart';
@@ -26,7 +28,7 @@ class VideoPlayerServiceHandler extends BaseAudioHandler with SeekHandler {
static final List<MediaItem> _item = [];
Box setting = GStrorage.setting;
bool enableBackgroundPlay = true;
PlPlayerController player = PlPlayerController.getInstance();
// PlPlayerController player = PlPlayerController.getInstance();
VideoPlayerServiceHandler() {
revalidateSetting();
@@ -39,12 +41,14 @@ class VideoPlayerServiceHandler extends BaseAudioHandler with SeekHandler {
@override
Future<void> play() async {
player.play();
await PlPlayerController.playIfExists();
// player.play();
}
@override
Future<void> pause() async {
player.pause();
await PlPlayerController.pauseIfExists();
// player.pause();
}
@override
@@ -52,12 +56,17 @@ class VideoPlayerServiceHandler extends BaseAudioHandler with SeekHandler {
playbackState.add(playbackState.value.copyWith(
updatePosition: position,
));
await player.seekTo(position);
await PlPlayerController.seekToIfExists(position);
// await player.seekTo(position);
}
Future<void> setMediaItem(MediaItem newMediaItem) async {
if (!enableBackgroundPlay) return;
mediaItem.add(newMediaItem);
// print("此时调用栈为:");
// print(newMediaItem);
// print(newMediaItem.title);
// debugPrint(StackTrace.current.toString());
if(!mediaItem.isClosed) mediaItem.add(newMediaItem);
}
Future<void> setPlaybackState(PlayerStatus status, bool isBuffering) async {
@@ -99,9 +108,11 @@ class VideoPlayerServiceHandler extends BaseAudioHandler with SeekHandler {
onVideoDetailChange(dynamic data, int cid) {
if (!enableBackgroundPlay) return;
// print('当前调用栈为:');
// print(StackTrace.current);
if (!PlPlayerController.instanceExists()) return;
if (data == null) return;
if (Get.arguments == null) return;
if (Get.arguments == null || Get.arguments['heroTag'] == null) return;
final heroTag = Get.arguments['heroTag'];
late MediaItem? mediaItem;
@@ -137,6 +148,8 @@ class VideoPlayerServiceHandler extends BaseAudioHandler with SeekHandler {
);
}
if (mediaItem == null) return;
print("exist: ${PlPlayerController.instanceExists()}");
if (!PlPlayerController.instanceExists()) return;
setMediaItem(mediaItem);
_item.add(mediaItem);
}
@@ -153,10 +166,8 @@ class VideoPlayerServiceHandler extends BaseAudioHandler with SeekHandler {
}
if (_item.isNotEmpty) {
setMediaItem(_item.last);
}
if (_item.isEmpty) {
playbackState
.add(playbackState.value.copyWith(updatePosition: Duration.zero));
} else {
mediaItem?.close();
}
stop();
}