🎬 短剧模块
版本 PanGrowth

📋 短剧信息与数据接口

pangrowth_content 插件对 DJX SDK 的短剧数据能力进行了完整封装,涵盖短剧列表、个性化推荐、分类检索、收藏/点赞、剧集解锁状态等常用场景。本章节示例均基于 Flutter API,Android 与 iOS 已实现同名通道。

✨ 可用能力总览

  • 短剧列表:分页列表、分类筛选、按 ID 批量获取
  • 推荐与搜索:个性化推荐、关键词搜索
  • 用户留存:观看历史、收藏列表、清理历史
  • 互动行为:收藏/取消收藏、点赞/取消点赞
  • 剧集控制:查询剧集锁定状态、校验解锁参数

🚀 API 详解

1. 获取短剧列表

final dramas = await PangrowthContent.getDramaList(
  page: 1,
  count: 20,
  order: true, // true 正序,false 倒序
);

2. 个性化推荐列表

final recommended = await PangrowthContent.getRecommendedDramaList(
  page: 1,
  count: 10,
);

3. 按分类获取短剧

final dramasByCategory = await PangrowthContent.getDramaListByCategory(
  '甜宠',
  page: 1,
  count: 20,
  ascending: false,
);

4. 按 ID 批量获取

final dramasByIds = await PangrowthContent.getDramaListByIds(<int>[
  1008611,
  1008612,
]);

5. 获取短剧分类列表

final categories = await PangrowthContent.getCategoryList();

6. 搜索短剧

final searchResults = await PangrowthContent.searchDrama(
  '都市',
  isFuzzy: true,
  page: 1,
  count: 15,
);

7. 观看历史

final history = await PangrowthContent.getDramaHistory(page: 1, count: 30);

清理历史:

await PangrowthContent.clearDramaHistory();

8. 收藏与收藏列表

// 收藏/取消收藏(episodeIndex 可选,Android SDK 需要传入)
await PangrowthContent.setDramaFavorite(1008611, favorite: true, episodeIndex: 0);

// 收藏列表(返回 DramaPageResult)
final favorPage = await PangrowthContent.getDramaFavorList(page: 1, count: 20);
print('收藏总数: ${favorPage.total}, 是否还有更多: ${favorPage.hasMore}');

9. 点赞剧集

await PangrowthContent.likeDramaEpisode(1008611, 3, like: true);

10. 剧集解锁状态

final episodes = await PangrowthContent.getDramaEpisodesStatus(
  dramaId: 1008611,
  freeSet: 3,
);
// EpisodeStatus(index: 4, isLocked: true)

11. 校验短剧解锁参数

final verifyResult = await PangrowthContent.verifyDramaParams(
  total: 30,
  freeSet: 3,
  lockSet: 2,
);

返回值结构

Map<String, dynamic> {
  'total': int,      // 总集数
  'freeSet': int,    // 免费集数
  'lockSet': int,    // 解锁集数
  'verified': bool,  // 是否通过校验
}

平台差异

  • Android: 返回 SDK 校验后的真实结果,verified 为 SDK 计算的校验状态
  • iOS: 暂未提供原生校验接口,返回输入值并附带 verified: false

示例

final result = await PangrowthContent.verifyDramaParams(
  total: 30,
  freeSet: 3,
  lockSet: 2,
);

if (result['verified'] == true) {
  debugPrint('参数校验通过: ${result['freeSet']}集免费, ${result['lockSet']}集解锁');
} else {
  debugPrint('参数校验失败或平台不支持');
}

📦 DramaInfo 数据结构

class DramaInfo {
  final int id;                // 短剧 ID
  final String title;          // 标题
  final String coverImage;     // 封面 URL
  final String desc;           // 简介
  final int total;             // 总集数
  final int index;             // 当前进度/历史记录中的最后集数
  final String type;           // 分类名称(可能为空)
  final int typeId;            // 分类 ID(Android)
  final int status;            // 状态(0 已完结 / 1 连载)
  final int freeSet;           // 免费集数
  final int lockSet;           // 单次可解锁集数
  final int createTime;        // 创建时间时间戳(ms)
  final int actionTime;        // 历史记录操作时间(ms)
  final String scriptName;     // 原著名称
  final String scriptAuthor;   // 原著作者
  final bool isFavor;          // 是否收藏
  final int favoriteCount;     // 收藏次数
  final int favoriteTime;      // 收藏时间戳(ms)
  final int levelLabel;        // 等级标签(1:S / 2:A / 3:B)
  final bool isPotential;      // 是否潜力剧
  final String icpNumber;      // 备案号
  final int groupId;           // 当前播放剧集的 groupId(iOS)
  final List<EpisodeStatus> episodeStatusList; // 剧集锁定信息
}

EpisodeStatus

class EpisodeStatus {
  final int index;     // 集数(从 1 开始)
  final bool isLocked; // 是否上锁
}

收藏列表接口返回 DramaPageResult

class DramaPageResult {
  final List<DramaInfo> items;   // 短剧列表
  final int total;               // 总条数(若 SDK 未返回,则为本页数量)
  final bool hasMore;            // 是否还有下一页
  final Map<String, dynamic> others; // SDK 透出的其他字段
}

💡 常用开发模式

批量加载 + 分类筛选

final categories = await PangrowthContent.getCategoryList();
if (categories.isNotEmpty) {
  final dramas = await PangrowthContent.getDramaListByCategory(categories.first);
  // 根据业务渲染 UI
}

收藏开关

Future<void> toggleFavorite(DramaInfo info) async {
  final nextState = !info.isFavor;
  await PangrowthContent.setDramaFavorite(info.id, favorite: nextState);
  await PangrowthContent.getDramaFavorList(page: 1, count: 20);
}

剧集解锁提示

final statuses = await PangrowthContent.getDramaEpisodesStatus(
  dramaId: info.id,
  freeSet: info.freeSet,
);
final lockedEpisode = statuses.firstWhere((e) => e.isLocked, orElse: () => const EpisodeStatus(index: 0, isLocked: false));
if (lockedEpisode.index > 0) {
  // 提示用户完成激励行为以解锁剧集 lockedEpisode.index
}

通过上述接口可以快速搭建短剧内容的自建列表、推荐位、收藏中心等功能;若还需要自建聚合页或播放页,可继续参考后续章节。

需要进一步协助?

与 LightCore 技术顾问沟通,获取商业化策略与集成支持。