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

View File

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

View File

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