diff --git a/lib/http/video.dart b/lib/http/video.dart index 706b12b5e..a30f6621e 100644 --- a/lib/http/video.dart +++ b/lib/http/video.dart @@ -247,19 +247,15 @@ abstract final class VideoHttp { case .pgc: final result = res.data['result']; - data = PlayUrlModel.fromJson(result['video_info']); - if (result['play_view_business_info']?['user_status']?['watch_progress']?['current_watch_progress'] - case final int progress when progress > 0) { - data.lastPlayTime = progress; - } + data = PlayUrlModel.fromJson(result['video_info']) + ..lastPlayTime = + result['play_view_business_info']?['user_status']?['watch_progress']?['current_watch_progress']; case .pugv: final result = res.data['data']; - data = PlayUrlModel.fromJson(result); - if (result['play_view_business_info']?['user_status']?['watch_progress']?['current_watch_progress'] - case final int progress when progress > 0) { - data.lastPlayTime = progress; - } + data = PlayUrlModel.fromJson(result) + ..lastPlayTime = + result['play_view_business_info']?['user_status']?['watch_progress']?['current_watch_progress']; } return Success(data); } else if (epid != null && videoType == .ugc) { diff --git a/lib/models/video/play/url.dart b/lib/models/video/play/url.dart index fd941964a..38b3f8aac 100644 --- a/lib/models/video/play/url.dart +++ b/lib/models/video/play/url.dart @@ -22,7 +22,7 @@ class PlayUrlModel { this.seekType, this.dash, this.supportFormats, - this.lastPlayTime, + this._lastPlayTime = 0, this.lastPlayCid, }); @@ -42,7 +42,17 @@ class PlayUrlModel { List? durl; List? supportFormats; Volume? volume; - int? lastPlayTime; + + late int _lastPlayTime; + int get lastPlayTime => _lastPlayTime; + set lastPlayTime(int? value) { + if (value != null && value > 0) { + _lastPlayTime = value; + } else { + _lastPlayTime = 0; + } + } + int? lastPlayCid; String? curLanguage; Language? language; @@ -69,9 +79,7 @@ class PlayUrlModel { ?.map((e) => FormatItem.fromJson(e)) .toList(); volume = json['volume'] == null ? null : Volume.fromJson(json['volume']); - if (json['last_play_time'] case final int progress when progress > 0) { - lastPlayTime = progress; - } + lastPlayTime = json['last_play_time']; lastPlayCid = json['last_play_cid']; curLanguage = json['cur_language']; language = json['language'] == null diff --git a/lib/pages/video/controller.dart b/lib/pages/video/controller.dart index b3e30dff2..3f1314bed 100644 --- a/lib/pages/video/controller.dart +++ b/lib/pages/video/controller.dart @@ -736,15 +736,10 @@ class VideoDetailController extends GetxController } Future playerInit({ - String? video, - String? audio, - Duration? seekToTime, - Duration? duration, bool? autoplay, - Volume? volume, bool autoFullScreenFlag = false, }) async { - Duration? seek = seekToTime ?? defaultST ?? playedTime; + Duration? seek = defaultST ?? playedTime; if (seek == null || seek == Duration.zero) { seek = getFirstSegment(); } @@ -757,15 +752,13 @@ class VideoDetailController extends GetxController hasDashAudio: entry.hasDashAudio, ) : NetworkSource( - videoSource: video ?? videoUrl!, - audioSource: audio ?? audioUrl, + videoSource: videoUrl!, + audioSource: audioUrl, ), seekTo: seek, - duration: - duration ?? - (data.timeLength == null - ? null - : Duration(milliseconds: data.timeLength!)), + duration: data.timeLength == null + ? null + : Duration(milliseconds: data.timeLength!), isVertical: isVertical.value, aid: aid, bvid: bvid, @@ -781,7 +774,7 @@ class VideoDetailController extends GetxController }, width: firstVideo.width, height: firstVideo.height, - volume: volume ?? this.volume, + volume: volume, autoFullScreenFlag: autoFullScreenFlag, ); @@ -815,14 +808,13 @@ class VideoDetailController extends GetxController return; } currLang.value = language; - queryVideoUrl(defaultST: playedTime); + queryVideoUrl(fromReset: true); } Volume? volume; // 视频链接 Future queryVideoUrl({ - Duration? defaultST, bool fromReset = false, bool autoFullScreenFlag = false, }) async { @@ -866,11 +858,13 @@ class VideoDetailController extends GetxController volume = data.volume; - final progress = args.remove('progress'); - if (progress != null) { - this.defaultST = Duration(milliseconds: progress); - } else if (defaultST == null && data.lastPlayTime != null) { - this.defaultST = Duration(milliseconds: data.lastPlayTime!); + if (!fromReset) { + final progress = args.remove('progress'); + if (progress != null) { + defaultST = Duration(milliseconds: progress); + } else { + defaultST = Duration(milliseconds: data.lastPlayTime); + } } if (!isUgc && !fromReset && plPlayerController.enablePgcSkip) { diff --git a/lib/pages/video/view.dart b/lib/pages/video/view.dart index 628809101..fcb0fa090 100644 --- a/lib/pages/video/view.dart +++ b/lib/pages/video/view.dart @@ -79,11 +79,7 @@ class VideoDetailPageV extends StatefulWidget { } class _VideoDetailPageVState extends State - with - TickerProviderStateMixin, - RouteAware, - RouteAwareMixin, - WidgetsBindingObserver { + with RouteAware, RouteAwareMixin, WidgetsBindingObserver { final heroTag = Get.arguments['heroTag']; late final VideoDetailController videoDetailController; @@ -1360,7 +1356,7 @@ class _VideoDetailPageVState extends State if (videoDetailController.tabCtr.length != tabs.length) { videoDetailController.tabCtr.dispose(); videoDetailController.tabCtr = TabController( - vsync: this, + vsync: videoDetailController, length: tabs.length, initialIndex: tabs.isEmpty ? 0 diff --git a/lib/pages/video/widgets/header_control.dart b/lib/pages/video/widgets/header_control.dart index 5e98ad359..5d1bcca05 100644 --- a/lib/pages/video/widgets/header_control.dart +++ b/lib/pages/video/widgets/header_control.dart @@ -449,10 +449,7 @@ class HeaderControlState extends State dense: true, onTap: () { Get.back(); - videoDetailCtr.queryVideoUrl( - defaultST: videoDetailCtr.playedTime, - fromReset: true, - ); + videoDetailCtr.queryVideoUrl(fromReset: true); }, leading: const Icon(Icons.refresh_outlined, size: 20), title: const Text('重载视频', style: titleStyle), @@ -518,10 +515,7 @@ class HeaderControlState extends State VideoUtils.cdnService = result; setting.put(SettingBoxKey.CDNService, result.name); SmartDialog.showToast('已设置为 ${result.desc},正在重载视频'); - videoDetailCtr.queryVideoUrl( - defaultST: videoDetailCtr.playedTime, - fromReset: true, - ); + videoDetailCtr.queryVideoUrl(fromReset: true); } }, ),