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) {
refreshSubtitles().then((value) {
if (_vttSubtitles.isNotEmpty) {
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(vttSubtitles[1]);
setSubtitle(1);
} else if (preference == 'withoutAi') {
bool found = false;
for (int i = 1; i < _vttSubtitles.length; i++) {
if (_vttSubtitles[i]['language']!.startsWith('ai')) {
continue;
}
setSubtitle(vttSubtitles[i]);
found = true;
setSubtitle(i);
break;
}
if (!found) _vttSubtitlesIndex.value = 0;
} else {
_vttSubtitlesIndex.value = 0;
}
}
}
});
@@ -1220,17 +1230,17 @@ class PlPlayerController {
}
// 设定字幕轨道
setSubtitle(Map<String, String> s) {
if (s['text'] == '') {
setSubtitle(int index) {
if (index == 0) {
_videoPlayerController?.setSubtitleTrack(SubtitleTrack.no());
_vttSubtitlesIndex.value = 0;
return;
}
Map<String, String> s = _vttSubtitles[index];
_videoPlayerController?.setSubtitleTrack(SubtitleTrack.data(
s['text']!,
title: s['title']!,
language: s['language']!,
));
_vttSubtitlesIndex.value = _vttSubtitles.indexOf(s);
}
}

View File

@@ -374,18 +374,21 @@ class _PLVideoPlayerState extends State<PLVideoPlayer>
: SizedBox(
width: 42,
height: 30,
child: PopupMenuButton<Map<String, String>>(
onSelected: (Map<String, String> value) {
child: PopupMenuButton<int>(
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<String, String> subtitle) {
return PopupMenuItem<Map<String, String>>(
value: subtitle,
return _.vttSubtitles.asMap().entries.map((entry) {
return PopupMenuItem<int>(
value: entry.key,
child: Text(
"${subtitle['title']}",
"${entry.value['title']}",
style: const TextStyle(color: Colors.white),
),
);