fix: 分p或分集时字幕选择范围溢出;优先保持选择序号

This commit is contained in:
orz12
2024-06-01 12:04:03 +08:00
parent 45056792aa
commit 19bdef7e32
2 changed files with 33 additions and 20 deletions

View File

@@ -413,17 +413,27 @@ class PlPlayerController {
if (videoType.value != 'live' && _cid != 0) { if (videoType.value != 'live' && _cid != 0) {
refreshSubtitles().then((value) { refreshSubtitles().then((value) {
if (_vttSubtitles.isNotEmpty) { if (_vttSubtitles.isNotEmpty) {
String preference = setting.get(SettingBoxKey.subtitlePreference, if (_vttSubtitlesIndex > 0 &&
defaultValue: SubtitlePreference.values.first.code); _vttSubtitlesIndex < _vttSubtitles.length) {
if (preference == 'on') { setSubtitle(_vttSubtitlesIndex.value);
setSubtitle(vttSubtitles[1]); } else {
} else if (preference == 'withoutAi') { String preference = setting.get(SettingBoxKey.subtitlePreference,
for (int i = 1; i < _vttSubtitles.length; i++) { defaultValue: SubtitlePreference.values.first.code);
if (_vttSubtitles[i]['language']!.startsWith('ai')) { if (preference == 'on') {
continue; 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]); if (!found) _vttSubtitlesIndex.value = 0;
break; } else {
_vttSubtitlesIndex.value = 0;
} }
} }
} }
@@ -1220,17 +1230,17 @@ class PlPlayerController {
} }
// 设定字幕轨道 // 设定字幕轨道
setSubtitle(Map<String, String> s) { setSubtitle(int index) {
if (s['text'] == '') { if (index == 0) {
_videoPlayerController?.setSubtitleTrack(SubtitleTrack.no()); _videoPlayerController?.setSubtitleTrack(SubtitleTrack.no());
_vttSubtitlesIndex.value = 0; _vttSubtitlesIndex.value = 0;
return; return;
} }
Map<String, String> s = _vttSubtitles[index];
_videoPlayerController?.setSubtitleTrack(SubtitleTrack.data( _videoPlayerController?.setSubtitleTrack(SubtitleTrack.data(
s['text']!, s['text']!,
title: s['title']!, title: s['title']!,
language: s['language']!, language: s['language']!,
)); ));
_vttSubtitlesIndex.value = _vttSubtitles.indexOf(s);
} }
} }

View File

@@ -374,18 +374,21 @@ class _PLVideoPlayerState extends State<PLVideoPlayer>
: SizedBox( : SizedBox(
width: 42, width: 42,
height: 30, height: 30,
child: PopupMenuButton<Map<String, String>>( child: PopupMenuButton<int>(
onSelected: (Map<String, String> value) { onSelected: (int value) {
_.setSubtitle(value); _.setSubtitle(value);
}, },
initialValue: _.vttSubtitles[_.vttSubtitlesIndex.value], initialValue:
_.vttSubtitles.length < _.vttSubtitlesIndex.value
? 0
: _.vttSubtitlesIndex.value,
color: Colors.black.withOpacity(0.8), color: Colors.black.withOpacity(0.8),
itemBuilder: (BuildContext context) { itemBuilder: (BuildContext context) {
return _.vttSubtitles.map((Map<String, String> subtitle) { return _.vttSubtitles.asMap().entries.map((entry) {
return PopupMenuItem<Map<String, String>>( return PopupMenuItem<int>(
value: subtitle, value: entry.key,
child: Text( child: Text(
"${subtitle['title']}", "${entry.value['title']}",
style: const TextStyle(color: Colors.white), style: const TextStyle(color: Colors.white),
), ),
); );