Files
video/app/lib/models/comment_item.dart
T
2026-10-15 20:36:59 +08:00

110 lines
3.4 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/// 评论模型(《03-接口文档》6.3/6.4/6.5,对应服务端 interaction_service 输出)
class CommentItem {
CommentItem({
required this.commentId,
required this.userId,
this.nickname = '',
this.avatarUrl = '',
this.content = '',
this.likeCount = 0,
this.replyCount = 0,
this.createdAt = '',
});
final int commentId;
final int userId;
final String nickname;
final String avatarUrl;
final String content;
final int likeCount;
/// 一级评论的回复数(二级回复列表项恒为 0)
final int replyCount;
final String createdAt;
CommentItem copyWith({int? replyCount}) => CommentItem(
commentId: commentId,
userId: userId,
nickname: nickname,
avatarUrl: avatarUrl,
content: content,
likeCount: likeCount,
replyCount: replyCount ?? this.replyCount,
createdAt: createdAt,
);
factory CommentItem.fromJson(Map<String, dynamic> json) {
final user = (json['user'] as Map<String, dynamic>?) ?? const {};
return CommentItem(
commentId: (json['comment_id'] as num?)?.toInt() ?? 0,
userId: (user['user_id'] as num?)?.toInt() ?? 0,
nickname: (user['nickname'] as String?) ?? '',
avatarUrl: (user['avatar_url'] as String?) ?? '',
content: (json['content'] as String?) ?? '',
likeCount: (json['like_count'] as num?)?.toInt() ?? 0,
replyCount: (json['reply_count'] as num?)?.toInt() ?? 0,
createdAt: (json['created_at'] as String?) ?? '',
);
}
}
/// 评论分页(普通 page/page_size 分页,《03-接口文档》1.4)
class CommentListPage {
CommentListPage({required this.total, required this.items});
final int total;
final List<CommentItem> items;
factory CommentListPage.fromJson(Map<String, dynamic> json) =>
CommentListPage(
total: (json['total'] as num?)?.toInt() ?? 0,
items: ((json['list'] as List?) ?? const [])
.whereType<Map<String, dynamic>>()
.map(CommentItem.fromJson)
.toList(),
);
}
/// 评论积分奖励进度(发表/删除评论响应中的 reward_progress)
class RewardProgress {
RewardProgress({
required this.current,
required this.target,
this.rewardedThisTime = false,
this.rewardPoints = 0,
});
/// 当前进度(满 target 自动发奖并清零)
final int current;
final int target;
/// 本次是否触发发奖
final bool rewardedThisTime;
/// 本次发放积分数(未发奖为 0)
final int rewardPoints;
factory RewardProgress.fromJson(Map<String, dynamic> json) => RewardProgress(
current: (json['current'] as num?)?.toInt() ?? 0,
target: (json['target'] as num?)?.toInt() ?? 10,
rewardedThisTime: (json['rewarded_this_time'] as bool?) ?? false,
rewardPoints: (json['reward_points'] as num?)?.toInt() ?? 0,
);
}
/// 发表评论响应(《03-接口文档》6.4)
class CommentCreateResult {
CommentCreateResult({required this.commentId, required this.rewardProgress});
final int commentId;
final RewardProgress rewardProgress;
factory CommentCreateResult.fromJson(Map<String, dynamic> json) =>
CommentCreateResult(
commentId: (json['comment_id'] as num?)?.toInt() ?? 0,
rewardProgress: RewardProgress.fromJson(
(json['reward_progress'] as Map<String, dynamic>?) ?? const {},
),
);
}