You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中使用Matrix包实现屏幕共享时应用崩溃求助

问题描述

我正在使用适用于实时通信的matrix包,已实现语音通话、视频通话及实时消息发送功能。尝试在通话中实现屏幕共享时,虽有默认方法可用,但启动屏幕共享时应用崩溃。

我使用的代码如下:

Future<void> handleScreenSharing() async {
  screenShared.toggle();
  await _groupCall?.setScreensharingEnabled(
    screenShared.value,
    groupCall.localDesktopCapturerSourceId,
  );
}

崩溃报错:
空指针异常报错截图

解决方案

从报错截图看,是空指针异常(Null check operator used on a null value),可从以下几个方向排查修复:

  • 修复空实例访问问题
    代码中_groupCall用了空安全调用?.,但后续直接访问groupCall.localDesktopCapturerSourceId未做空判断,若groupCall实例为空会直接崩溃。统一做空安全校验:

    Future<void> handleScreenSharing() async {
      screenShared.toggle();
      if (_groupCall == null) return;
      await _groupCall!.setScreensharingEnabled(
        screenShared.value,
        _groupCall!.localDesktopCapturerSourceId,
      );
    }
    
  • 确保桌面捕获源ID已初始化
    localDesktopCapturerSourceId未获取到有效ID就调用屏幕共享,也会引发崩溃。需先获取可用的屏幕/窗口源:

    // 先获取桌面捕获源列表
    Future<void> loadDesktopSources() async {
      if (_groupCall == null) return;
      final sources = await _groupCall!.getDesktopCapturerSources();
      // 可让用户选择源,此处默认取第一个示例
      if (sources.isNotEmpty) {
        _groupCall!.localDesktopCapturerSourceId = sources.first.id;
      }
    }
    
    // 调用屏幕共享前校验源ID
    Future<void> handleScreenSharing() async {
      if (_groupCall == null || _groupCall!.localDesktopCapturerSourceId == null) {
        await loadDesktopSources();
        if (_groupCall?.localDesktopCapturerSourceId == null) return;
      }
      screenShared.toggle();
      await _groupCall!.setScreensharingEnabled(
        screenShared.value,
        _groupCall!.localDesktopCapturerSourceId!,
      );
    }
    
  • 检查平台权限
    屏幕共享需要对应平台权限:

    • Android:需在Manifest中声明RECORD_AUDIO、MEDIA_CONTENT_CONTROL等权限,并动态申请;Android 10+额外需要ACCESS_MEDIA_LOCATION。
    • iOS:在Info.plist中添加NSScreenCaptureUsageDescription权限描述。
    • 桌面端:确保系统已授予屏幕录制权限。
  • 升级matrix包版本
    旧版本可能存在屏幕共享相关bug,尝试升级至最新稳定版。

内容的提问来源于stack exchange,提问作者Ruban

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 10:52:05