From 19bdef7e321f0bf4d7236e7f325e196d7d2ab1b2 Mon Sep 17 00:00:00 2001 From: orz12 Date: Sat, 1 Jun 2024 12:04:03 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=88=86p=E6=88=96=E5=88=86=E9=9B=86?= =?UTF-8?q?=E6=97=B6=E5=AD=97=E5=B9=95=E9=80=89=E6=8B=A9=E8=8C=83=E5=9B=B4?= =?UTF-8?q?=E6=BA=A2=E5=87=BA=EF=BC=9B=E4=BC=98=E5=85=88=E4=BF=9D=E6=8C=81?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E5=BA=8F=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/plugin/pl_player/controller.dart | 36 ++++++++++++++++++---------- lib/plugin/pl_player/view.dart | 17 +++++++------ 2 files changed, 33 insertions(+), 20 deletions(-) diff --git a/lib/plugin/pl_player/controller.dart b/lib/plugin/pl_player/controller.dart index d381a580..abee46cf 100644 --- a/lib/plugin/pl_player/controller.dart +++ b/lib/plugin/pl_player/controller.dart @@ -413,17 +413,27 @@ class PlPlayerController { if (videoType.value != 'live' && _cid != 0) { refreshSubtitles().then((value) { if (_vttSubtitles.isNotEmpty) { - String preference = setting.get(SettingBoxKey.subtitlePreference, - defaultValue: SubtitlePreference.values.first.code); - if (preference == 'on') { - setSubtitle(vttSubtitles[1]); - } else if (preference == 'withoutAi') { - for (int i = 1; i < _vttSubtitles.length; i++) { - if (_vttSubtitles[i]['language']!.startsWith('ai')) { - continue; + if (_vttSubtitlesIndex > 0 && + _vttSubtitlesIndex < _vttSubtitles.length) { + setSubtitle(_vttSubtitlesIndex.value); + } else { + String preference = setting.get(SettingBoxKey.subtitlePreference, + defaultValue: SubtitlePreference.values.first.code); + if (preference == 'on') { + setSubtitle(1); + } else if (preference == 'withoutAi') { + bool found = false; + for (int i = 1; i < _vttSubtitles.length; i++) { + if (_vttSubtitles[i]['language']!.startsWith('ai')) { + continue; + } + found = true; + setSubtitle(i); + break; } - setSubtitle(vttSubtitles[i]); - break; + if (!found) _vttSubtitlesIndex.value = 0; + } else { + _vttSubtitlesIndex.value = 0; } } } @@ -1220,17 +1230,17 @@ class PlPlayerController { } // 设定字幕轨道 - setSubtitle(Map s) { - if (s['text'] == '') { + setSubtitle(int index) { + if (index == 0) { _videoPlayerController?.setSubtitleTrack(SubtitleTrack.no()); _vttSubtitlesIndex.value = 0; return; } + Map s = _vttSubtitles[index]; _videoPlayerController?.setSubtitleTrack(SubtitleTrack.data( s['text']!, title: s['title']!, language: s['language']!, )); - _vttSubtitlesIndex.value = _vttSubtitles.indexOf(s); } } diff --git a/lib/plugin/pl_player/view.dart b/lib/plugin/pl_player/view.dart index 6c391e84..2813c1b6 100644 --- a/lib/plugin/pl_player/view.dart +++ b/lib/plugin/pl_player/view.dart @@ -374,18 +374,21 @@ class _PLVideoPlayerState extends State : SizedBox( width: 42, height: 30, - child: PopupMenuButton>( - onSelected: (Map value) { + child: PopupMenuButton( + onSelected: (int value) { _.setSubtitle(value); }, - initialValue: _.vttSubtitles[_.vttSubtitlesIndex.value], + initialValue: + _.vttSubtitles.length < _.vttSubtitlesIndex.value + ? 0 + : _.vttSubtitlesIndex.value, color: Colors.black.withOpacity(0.8), itemBuilder: (BuildContext context) { - return _.vttSubtitles.map((Map subtitle) { - return PopupMenuItem>( - value: subtitle, + return _.vttSubtitles.asMap().entries.map((entry) { + return PopupMenuItem( + value: entry.key, child: Text( - "${subtitle['title']}", + "${entry.value['title']}", style: const TextStyle(color: Colors.white), ), );