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,18 +413,28 @@ 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) {
if (_vttSubtitlesIndex > 0 &&
_vttSubtitlesIndex < _vttSubtitles.length) {
setSubtitle(_vttSubtitlesIndex.value);
} else {
String preference = setting.get(SettingBoxKey.subtitlePreference, String preference = setting.get(SettingBoxKey.subtitlePreference,
defaultValue: SubtitlePreference.values.first.code); defaultValue: SubtitlePreference.values.first.code);
if (preference == 'on') { if (preference == 'on') {
setSubtitle(vttSubtitles[1]); setSubtitle(1);
} else if (preference == 'withoutAi') { } else if (preference == 'withoutAi') {
bool found = false;
for (int i = 1; i < _vttSubtitles.length; i++) { for (int i = 1; i < _vttSubtitles.length; i++) {
if (_vttSubtitles[i]['language']!.startsWith('ai')) { if (_vttSubtitles[i]['language']!.startsWith('ai')) {
continue; continue;
} }
setSubtitle(vttSubtitles[i]); found = true;
setSubtitle(i);
break; break;
} }
if (!found) _vttSubtitlesIndex.value = 0;
} 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),
), ),
); );