初始化

This commit is contained in:
谢宇宁
2026-09-15 15:44:13 +07:00
commit a23ba685e9
1065 changed files with 101122 additions and 0 deletions
+73
View File
@@ -0,0 +1,73 @@
import '../../hj_model/video_model.dart';
/// 付费引导弹窗配置(场景 VIP_CONTENT_UPDATEVIP 内容上新顶部推送横幅)
/// 只解析前端用得到的字段;title/segment/style/cover/durationSeconds/videoIds 暂未使用
class GuidePushModel {
bool? show; // false = 本次不展示(已展示过 / 无可用配置 / 无符合条件内容)
String? configId;
String? contentVersion; // 内容版本,上报回执时原样带回;也是本地去重的依据
String? description; // 横幅标题文案
String? productId;
GuidePushAction? action; // 按钮跳转配置
List<GuidePushVideo> videos = []; // 最新 VIP 内容,最多 4 条
GuidePushModel.fromJson(Map<String, dynamic>? json) {
json ??= {};
show = json['show'];
configId = json['configId'];
contentVersion = json['contentVersion'];
description = json['description'];
productId = json['productId'];
if (json['action'] is Map) {
action = GuidePushAction.fromJson(json['action']);
}
if (json['videos'] is List) {
videos = (json['videos'] as List).map((e) => GuidePushVideo.fromJson(e)).toList();
}
}
}
/// 弹窗按钮动作:type=VIP_PRODUCT 时 value 为会员商品 id
class GuidePushAction {
String? type;
String? value;
GuidePushAction.fromJson(Map<String, dynamic>? json) {
json ??= {};
type = json['type'];
value = json['value'];
}
}
class GuidePushVideo {
String? id;
String? title;
String? cover;
String? coverThumb; // 缩略图,列表展示优先用它
int? playTime; // 时长(秒)
int? playCount; // 播放量
GuidePushVideo.fromJson(Map<String, dynamic>? json) {
json ??= {};
id = json['id'];
title = json['title'];
cover = json['cover'];
coverThumb = json['coverThumb'];
playTime = json['playTime'];
playCount = json['playCount'];
}
/// 列表用封面:缩略图为空时回落大图
String get showCover => coverThumb?.isNotEmpty == true ? coverThumb! : cover ?? '';
/// 转成 VideoModel,复用项目现成的视频 cell。
/// freeArea=true 是为了让 cell 不画右上角 VIP 角标(见 VideoSimpleCell._buildLevelIcon)
/// ⚠️ 因此这个对象只能喂给 cell 渲染,不能传给播放页——那边会当成免费区、放过付费拦截
VideoModel toVideoModel() => VideoModel()
..id = id
..title = title
..cover = showCover
..playTime = playTime
..playCount = playCount
..freeArea = true;
}