Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-10-01 20:22:33 +08:00
parent 4e15422d2d
commit 022108607f
3 changed files with 42 additions and 52 deletions

View File

@@ -358,14 +358,14 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
AutoOrientation.portraitUpMode();
}
shutdownTimerService.handleWaitingFinished();
if (videoDetailController.plPlayerController.backToHome != true) {
if (!videoDetailController.plPlayerController.isCloseAll) {
videoPlayerServiceHandler?.onVideoDetailDispose(heroTag);
}
if (plPlayerController != null) {
videoDetailController.makeHeartBeat();
plPlayerController!.dispose();
} else {
PlPlayerController.updatePlayCount();
if (plPlayerController != null) {
videoDetailController.makeHeartBeat();
plPlayerController!.dispose();
} else {
PlPlayerController.updatePlayCount();
}
}
PageUtils.routeObserver.unsubscribe(this);
WidgetsBinding.instance.removeObserver(this);
@@ -716,9 +716,9 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
),
onPressed: () {
videoDetailController
.plPlayerController
.backToHome =
true;
.plPlayerController
..isCloseAll = true
..dispose();
Get.until(
(route) => route.isFirst,
);
@@ -1328,8 +1328,9 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
],
),
onPressed: () {
videoDetailController.plPlayerController.backToHome =
true;
videoDetailController.plPlayerController
..isCloseAll = true
..dispose();
Get.until((route) => route.isFirst);
},
),

View File

@@ -1966,7 +1966,9 @@ class HeaderControlState extends State<HeaderControl> {
color: Colors.white,
),
onPressed: () {
videoDetailCtr.plPlayerController.backToHome = true;
videoDetailCtr.plPlayerController
..isCloseAll = true
..dispose();
Get.until((route) => route.isFirst);
},
),

View File

@@ -124,7 +124,6 @@ class PlPlayerController {
final RxBool _isSliderMoving = false.obs;
PlaylistMode _looping = PlaylistMode.none;
bool _autoPlay = false;
final bool _listenersInitialized = false;
// 记录历史记录
int? _aid;
@@ -504,8 +503,6 @@ class PlPlayerController {
_playCallBack = playCallBack;
}
bool? backToHome;
static Function? _playCallBack;
static void playIfExists({bool repeat = false, bool hideControls = true}) {
@@ -660,9 +657,7 @@ class PlPlayerController {
dataStatus.status.value = DataStatus.loaded;
// listen the video player events
if (!_listenersInitialized) {
startListeners();
}
startListeners();
await _initializePlayer();
} catch (err, stackTrace) {
dataStatus.status.value = DataStatus.error;
@@ -1136,10 +1131,10 @@ class PlPlayerController {
}
/// 移除事件监听
void removeListeners() {
for (final s in subscriptions) {
s.cancel();
}
Future<void> removeListeners() async {
_statusListeners.clear();
_positionListeners.clear();
await Future.wait(subscriptions.map((e) => e.cancel()));
}
/// 跳转至指定位置
@@ -1672,10 +1667,11 @@ class PlPlayerController {
});
}
bool isCloseAll = false;
Future<void> dispose() async {
// 每次减1最后销毁
cancelLongPressTimer();
if (_playerCount > 1) {
if (!isCloseAll && _playerCount > 1) {
_playerCount -= 1;
_heartDuration = 0;
if (!Get.previousRoute.startsWith('/video')) {
@@ -1687,36 +1683,27 @@ class PlPlayerController {
_playerCount = 0;
_clearPreview();
Utils.channel.setMethodCallHandler(null);
pause();
try {
_timer?.cancel();
_timerForSeek?.cancel();
_timerForShowingVolume?.cancel();
// _position.close();
_playerEventSubs?.cancel();
// _sliderPosition.close();
// _sliderTempPosition.close();
// _isSliderMoving.close();
// _duration.close();
// _buffered.close();
// _showControls.close();
// _controlsLock.close();
_timer?.cancel();
_timerForSeek?.cancel();
_timerForShowingVolume?.cancel();
// _position.close();
_playerEventSubs?.cancel();
// _sliderPosition.close();
// _sliderTempPosition.close();
// _isSliderMoving.close();
// _duration.close();
// _buffered.close();
// _showControls.close();
// _controlsLock.close();
// playerStatus.status.close();
// dataStatus.status.close();
// playerStatus.status.close();
// dataStatus.status.close();
if (_videoPlayerController != null) {
var pp = _videoPlayerController!.platform!;
await pp.setProperty('audio-files', '');
removeListeners();
await _videoPlayerController!.dispose();
_videoPlayerController = null;
}
_instance = null;
videoPlayerServiceHandler?.clear();
} catch (err) {
if (kDebugMode) debugPrint(err.toString());
}
await removeListeners();
_videoPlayerController?.dispose();
_videoPlayerController = null;
_instance = null;
videoPlayerServiceHandler?.clear();
}
static void updatePlayCount() {