帮你快速理解、总结文档立即下载

ScreenShareStore

最近更新时间:2026-10-23 17:00:00
我的收藏

简介

ScreenShareStore 提供了一套完整的屏幕分享 API,包括移动端整屏分享,以及桌面端(Win/Mac)的屏幕 / 窗口源枚举与指定目标分享。
重要:
请使用 shared 单例获取 ScreenShareStore 实例。不要尝试直接初始化。
说明:
屏幕分享状态更新通过 state 发布者传递。订阅它以接收屏幕分享状态的实时更新。

功能特性

屏幕分享:开启和停止屏幕分享,支持 iOS App Group 与桌面端采集属性配置。
采集源枚举:枚举可分享的屏幕与应用窗口,附缩略图与图标,用于构建源选择器 UI(仅桌面端)。
状态订阅:实时订阅屏幕分享状态变化。

可订阅数据

ScreenShareState 的字段描述如下:
属性名
类型
描述
screenStatus
ValueListenable<DeviceStatus>
屏幕分享状态。

API 列表

函数名
描述
shared
单例对象。
开启屏幕分享。
枚举可分享的屏幕 / 窗口(仅桌面端)。
停止屏幕分享。
reset
重置为默认状态。

获取实例

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
ValueListenable<DeviceStatus>
屏幕分享状态。

使用示例

// 获取单例实例
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();