🚀 快速开始
2.0: 对应 2.0.0 纯短剧契约。pub.dev 当前仍提供 1.0.3;依赖尚未升级时请切换到 1.x 文档。
启动 SDK
import 'package:flutter/foundation.dart';
import 'package:gromore_ads/gromore_ads.dart';
import 'package:pangrowth_content/pangrowth_content.dart';
Future<void> startShortDrama({
required String gromoreAppId,
required String pangrowthConfigPath,
}) async {
await GromoreAds.initialize(
GromoreInitConfig(
appId: gromoreAppId,
useMediation: true,
debugMode: kDebugMode,
),
);
await PangrowthContent.initialize(
PangrowthInitConfig(
configPath: pangrowthConfigPath,
debug: kDebugMode,
personalizationEnabled: true,
android: const AndroidPangrowthOptions(
imageCacheSizeMb: 64,
toastPolicy: PangrowthToastPolicy.sdkDefault,
privacy: AndroidPangrowthPrivacyConfig(
allowAndroidId: false,
allowOaid: false,
teenagerMode: false,
onlyRegisteredContent: true,
),
),
ios: const IosPangrowthOptions(
disableAbTest: false,
newUser: false,
hostManagesAudioSession: true,
toastPolicy: PangrowthToastPolicy.sdkDefault,
privacy: IosPangrowthPrivacyConfig(
allowIdfa: false,
teenagerMode: false,
onlyRegisteredContent: true,
),
),
),
);
await PangrowthContent.start();
}gromoreAppId 和 pangrowthConfigPath 应由宿主专用配置读取,是否纳入版本控制由宿主仓库策略决定。配置与当前应用身份或签名不匹配时,真实内容和广告数据无法正常返回;配置缺失或为空时应在调用 SDK 前明确失败。
initialize() 只保存内容 SDK 配置;start() 才会启动服务。GroMore 未 ready、配置文件无效或厂商启动失败时会抛出 PangrowthException,错误对象完整提供 code、subCode、message、requestId 和 details。
Android 与 iOS 初始化参数独立分组,另一平台的配置不会发送给原生 SDK。个性化推荐在双端使用同一组运行时接口:
await PangrowthContent.setPersonalization(false);
final bool enabled = await PangrowthContent.getPersonalization();展示聚合页
class DramaHomePage extends StatelessWidget {
const DramaHomePage({super.key});
@override
Widget build(BuildContext context) {
return const Scaffold(
body: SafeArea(
child: DramaHomeNativeView(
config: DramaHomeConfig(
detail: DramaDetailConfig(
unlockMode: DramaUnlockMode.sdkManaged,
freeEpisodes: 5,
unlockEpisodesPerAd: 2,
),
),
),
),
);
}
}生命周期
- 只在 PanGrowth
start()成功后创建页面。 - 原生页面必须获得非零、有边界且稳定的尺寸;全屏页建议直接占满
Scaffold.body。 - Android 宿主必须使用
FlutterFragmentActivity,三个 Fragment 页面固定使用 Hybrid Composition。 - 页面离开 Widget 树后由 PlatformView 自动释放原生 Fragment 或 ViewController。
- controller 的
dispose()可以重复调用,但 dispose 后的控制方法会抛出状态错误。 - 切换到后台时暂停播放器,回到前台后按业务需要恢复。
更多页面能力参见Widget 导航。