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,15 +358,15 @@ 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);
showStatusBar(); showStatusBar();
@@ -717,8 +717,8 @@ 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,8 +1683,6 @@ class PlPlayerController {
_playerCount = 0; _playerCount = 0;
_clearPreview(); _clearPreview();
Utils.channel.setMethodCallHandler(null); Utils.channel.setMethodCallHandler(null);
pause();
try {
_timer?.cancel(); _timer?.cancel();
_timerForSeek?.cancel(); _timerForSeek?.cancel();
_timerForShowingVolume?.cancel(); _timerForShowingVolume?.cancel();
@@ -1705,18 +1699,11 @@ class PlPlayerController {
// 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', '');
removeListeners();
await _videoPlayerController!.dispose();
_videoPlayerController = null; _videoPlayerController = null;
}
_instance = null; _instance = null;
videoPlayerServiceHandler?.clear(); videoPlayerServiceHandler?.clear();
} catch (err) {
if (kDebugMode) debugPrint(err.toString());
}
} }
static void updatePlayCount() { static void updatePlayCount() {