mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
fix: 分p或分集时字幕选择范围溢出;优先保持选择序号
This commit is contained in:
@@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user