feat(player): 点赞与评论改为按集

This commit is contained in:
Zhou Weidong committed 2026-10-21 16:15:29 +08:00
1 parent e6f34977f5
commit 83822a0cbb
25 files changed
+337 -69

No files matched your search

+18 -9
View File
@@ -15,6 +15,8 @@ class Episode {
this.videoUrl = '',
this.durationSec = 0,
this.locked = false,
this.likeCount,
this.commentCount,
});
final String id;
@@ -28,16 +30,21 @@ class Episode {
/// 后端判定需要解锁;解锁能力(金币/VIP)在 M3 接入。
final bool locked;
final int? likeCount;
final int? commentCount;
Episode withVideoUrl(String url) => Episode(
id: id,
number: number,
title: title,
isFree: isFree,
videoUrl: url,
durationSec: durationSec,
locked: locked,
);
Episode withVideoUrl(String url, {int? likeCount, int? commentCount}) =>
Episode(
id: id,
number: number,
title: title,
isFree: isFree,
videoUrl: url,
durationSec: durationSec,
locked: locked,
likeCount: likeCount ?? this.likeCount,
commentCount: commentCount ?? this.commentCount,
);
factory Episode.fromJson(Map<String, dynamic> json) {
return Episode(
@@ -48,6 +55,8 @@ class Episode {
durationSec: (json['durationSec'] as num?)?.toInt() ?? 0,
locked: json['locked'] == true,
videoUrl: json['playUrl'] as String? ?? '',
likeCount: _optionalInt(json['likeCount']),
commentCount: _optionalInt(json['commentCount']),
);
}
}
+2 -1
View File
@@ -2,9 +2,10 @@
import 'json_numbers.dart';
/// 互动目标类型,契约只允许短剧与评论。
/// 互动目标类型。
enum InteractionTargetType {
drama('DRAMA'),
episode('EPISODE'),
comment('COMMENT');
const InteractionTargetType(this.apiValue);
+10
View File
@@ -14,6 +14,8 @@ class PlayTicket {
this.unlockCoin = 0,
this.previewSeconds = 0,
this.qualities = const [],
this.likeCount,
this.commentCount,
});
static const String free = 'FREE';
@@ -38,6 +40,8 @@ class PlayTicket {
/// 后端下发的清晰度档位(如 AUTO / 720P / 1080P),HLS 由播放器自动切换。
final List<String> qualities;
final int? likeCount;
final int? commentCount;
bool get needsUnlock =>
accessType == coinRequired || accessType == vipRequired;
@@ -58,6 +62,12 @@ class PlayTicket {
.whereType<String>()
.where((quality) => quality.isNotEmpty)
.toList(),
likeCount: json['likeCount'] == null
? null
: jsonToInt(json['likeCount']),
commentCount: json['commentCount'] == null
? null
: jsonToInt(json['commentCount']),
);
}
}