简介
ScreenShareStore 提供了一套完整的屏幕分享 API,包括移动端整屏分享,以及桌面端(Win/Mac)的屏幕 / 窗口源枚举与指定目标分享。重要:
请使用 shared 单例获取
ScreenShareStore 实例。不要尝试直接初始化。说明:
屏幕分享状态更新通过 state 发布者传递。订阅它以接收屏幕分享状态的实时更新。
功能特性
屏幕分享:开启和停止屏幕分享,支持 iOS App Group 与桌面端采集属性配置。
采集源枚举:枚举可分享的屏幕与应用窗口,附缩略图与图标,用于构建源选择器 UI(仅桌面端)。
状态订阅:实时订阅屏幕分享状态变化。
可订阅数据
ScreenShareState 的字段描述如下:
属性名 | 类型 | 描述 |
screenStatus | 屏幕分享状态。 |
API 列表
函数名 | 描述 |
单例对象。 | |
开启屏幕分享。 | |
枚举可分享的屏幕 / 窗口(仅桌面端)。 | |
停止屏幕分享。 | |
重置为默认状态。 |
获取实例
shared
单例对象。
屏幕分享
startScreenShare
开启屏幕分享。
void startScreenShare({String iOSAppGroup = '', String? sourceId, ShareConfig? property});
版本信息
从3.5版本开始支持。
参数说明
参数名 | 类型 | 描述 |
iOSAppGroup | String | 默认值为 '',Android 平台保持默认即可(该参数在 Android 上被忽略)。iOS 上:该值必须与 Broadcast Upload Extension 中配置的 App Group 字符串保持一致,用于宿主 App 与 Extension 之间共享数据,格式形如 group.<反向域名>。允许传入空字符串,但屏幕共享的稳定性不保证,建议正确配置。 |
sourceId | String? | 仅桌面端(Win/Mac)。要分享的屏幕 / 窗口的运行时句柄,取自 getShareSources 返回的 ShareSource.sourceId。为 null 时表示不指定具体目标。该句柄是易失的,不可持久化;只能在句柄存活期间回传。 |
property | 仅桌面端(Win/Mac)。采集配置,参见 ShareConfig。为 null 时使用默认配置。 |
getShareSources
枚举可分享的屏幕 / 窗口(仅桌面端)。
Future<List<ShareSource>> getShareSources({required Size thumbnailSize, required Size iconSize});
版本信息
从3.5版本开始支持。
参数说明
参数名 | 类型 | 描述 |
thumbnailSize | Size | 每个源期望的缩略图尺寸。 |
iconSize | Size | 每个源期望的图标尺寸。 |
stopScreenShare
关闭屏幕采集。
void stopScreenShare();
版本信息
从3.5版本开始支持。
重置
reset
重置为默认状态。
void reset();
版本信息
从3.5版本开始支持。
数据结构
ShareSourceType
分享源类型(仅桌面端)。
枚举值 | 值 | 说明 |
window | 0 | 应用窗口。 |
screen | 1 | 物理显示器 / 整块屏幕。 |
ShareSource
可分享的屏幕 / 窗口源(仅桌面端)。
属性 | 类型 | 说明 |
type | 源类型。 | |
sourceId | String | 字符串化的运行时句柄(HWND / CGWindowID)。不可持久化。 |
sourceName | String | 枚举时刻的源名称。可能与当前窗口标题存在偏差。 |
isMinimizeWindow | bool | 窗口是否最小化。可用于在源选择器 UI 中隐藏或置灰最小化窗口(最小化窗口无法有效采集)。 |
thumbnail | ImageProvider? | 缩略图,未请求或不可用时为 null。 |
icon | ImageProvider? | 图标,未请求或不可用时为 null。 |
ShareConfig
分享采集配置(仅桌面端)。
属性 | 类型 | 说明 |
enableCaptureMouse | bool | 是否采集鼠标光标。默认值为 true。 |
ScreenShareState
屏幕分享状态。
属性 | 类型 | 说明 |
screenStatus | 屏幕分享状态。 |
使用示例
// 获取单例实例final store = ScreenShareStore.shared;// 订阅状态变化store.state.screenStatus.addListener(() {print('屏幕分享状态: ${store.state.screenStatus.value}');});// 移动端:开启屏幕分享store.startScreenShare(iOSAppGroup: 'group.com.example.app');// 桌面端:枚举源并指定目标分享final sources = await store.getShareSources(thumbnailSize: const Size(320, 180),iconSize: const Size(48, 48),);if (sources.isNotEmpty) {store.startScreenShare(sourceId: sources.first.sourceId);}// 停止屏幕分享store.stopScreenShare();