Merge branch 'fix' into alpha

This commit is contained in:
guozhigq
2023-10-21 21:40:09 +08:00
2 changed files with 50 additions and 39 deletions

View File

@ -70,20 +70,25 @@ class VideoCardV extends StatelessWidget {
break; break;
// 动态 // 动态
case 'picture': case 'picture':
try {
String dynamicType = 'picture'; String dynamicType = 'picture';
String uri = videoItem.uri; String uri = videoItem.uri;
if (videoItem.uri.contains('bilibili://article/')) { String id = '';
dynamicType = 'article'; if (videoItem.uri.startsWith('bilibili://article/')) {
// https://www.bilibili.com/read/cv27063554
dynamicType = 'read';
RegExp regex = RegExp(r'\d+'); RegExp regex = RegExp(r'\d+');
Match match = regex.firstMatch(videoItem.uri)!; Match match = regex.firstMatch(videoItem.uri)!;
String matchedNumber = match.group(0)!; String matchedNumber = match.group(0)!;
videoItem.param = 'cv' + matchedNumber; videoItem.param = int.parse(matchedNumber);
id = 'cv${videoItem.param}';
} }
if (uri.startsWith('http')) { if (uri.startsWith('http')) {
String path = Uri.parse(uri).path; String path = Uri.parse(uri).path;
if (isStringNumeric(path.split('/')[1])) { if (isStringNumeric(path.split('/')[1])) {
// 请求接口 // 请求接口
var res = await DynamicsHttp.dynamicDetail(id: path.split('/')[1]); var res =
await DynamicsHttp.dynamicDetail(id: path.split('/')[1]);
if (res['status']) { if (res['status']) {
Get.toNamed('/dynamicDetail', arguments: { Get.toNamed('/dynamicDetail', arguments: {
'item': res['data'], 'item': res['data'],
@ -97,9 +102,12 @@ class VideoCardV extends StatelessWidget {
Get.toNamed('/htmlRender', parameters: { Get.toNamed('/htmlRender', parameters: {
'url': uri, 'url': uri,
'title': videoItem.title, 'title': videoItem.title,
'id': videoItem.param.toString(), 'id': id,
'dynamicType': dynamicType 'dynamicType': dynamicType
}); });
} catch (err) {
SmartDialog.showToast(err.toString());
}
break; break;
default: default:
SmartDialog.showToast(videoItem.goto); SmartDialog.showToast(videoItem.goto);

View File

@ -214,6 +214,8 @@ class PlPlayerController {
late double fontSizeVal; late double fontSizeVal;
late double danmakuSpeedVal; late double danmakuSpeedVal;
late List speedsList; late List speedsList;
// 缓存
double? defaultDuration;
// 播放顺序相关 // 播放顺序相关
PlayRepeat playRepeat = PlayRepeat.pause; PlayRepeat playRepeat = PlayRepeat.pause;
@ -575,8 +577,9 @@ class PlPlayerController {
await _videoPlayerController?.setRate(speed); await _videoPlayerController?.setRate(speed);
try { try {
DanmakuOption currentOption = danmakuController!.option; DanmakuOption currentOption = danmakuController!.option;
defaultDuration ??= currentOption.duration;
DanmakuOption updatedOption = currentOption.copyWith( DanmakuOption updatedOption = currentOption.copyWith(
duration: (currentOption.duration / speed) * playbackSpeed); duration: (defaultDuration! / speed) * playbackSpeed);
danmakuController!.updateOption(updatedOption); danmakuController!.updateOption(updatedOption);
} catch (_) {} } catch (_) {}
// fix 长按倍速后放开不恢复 // fix 长按倍速后放开不恢复
@ -584,16 +587,16 @@ class PlPlayerController {
} }
/// 设置倍速 /// 设置倍速
Future<void> togglePlaybackSpeed() async { // Future<void> togglePlaybackSpeed() async {
List<double> allowedSpeeds = // List<double> allowedSpeeds =
PlaySpeed.values.map<double>((e) => e.value).toList(); // PlaySpeed.values.map<double>((e) => e.value).toList();
int index = allowedSpeeds.indexOf(_playbackSpeed.value); // int index = allowedSpeeds.indexOf(_playbackSpeed.value);
if (index < allowedSpeeds.length - 1) { // if (index < allowedSpeeds.length - 1) {
setPlaybackSpeed(allowedSpeeds[index + 1]); // setPlaybackSpeed(allowedSpeeds[index + 1]);
} else { // } else {
setPlaybackSpeed(allowedSpeeds[0]); // setPlaybackSpeed(allowedSpeeds[0]);
} // }
} // }
/// 播放视频 /// 播放视频
Future<void> play({bool repeat = false, bool hideControls = true}) async { Future<void> play({bool repeat = false, bool hideControls = true}) async {