观众观看(Flutter)

最近更新时间:2026-01-09 19:35:11

我的收藏
TUILiveKit 语聊房为纯音频直播场景提供了开箱即用的全功能界面。它支持快速搭建观众观看、上麦互动所需的核心能力,让您无需关注复杂的 UI 与麦位管理逻辑。

功能概览

收听直播: 清晰、流畅地收听主播的实时音频直播。
上麦互动: 申请上麦,与主播进行音频连麦互动。
直播间信息: 查看直播间公告,及在线观众列表等信息。
观众互动: 支持弹幕、礼物、点赞等丰富的直播互动形式。
收听直播
上麦互动
直播间信息
观众互动







快速接入

步骤1:开通服务

参考 开通服务 文档开通体验版大规模直播版套餐。

步骤2:代码集成

参考 准备工作 接入 TUILiveKit。

步骤3:添加观众观看页面

TUIVoiceRoomWidget 已内置了语聊房场景的观众端完整 UI 与业务逻辑,该组件不支持浮窗模式,如需浮窗功能请转到 添加浮窗版观众观看页面。您只需要配置 TUIVoiceRoomWidget 的调用入口(具体由您的业务决定),执行如下操作,拉起观众观看页面或将观众观看页面集成到自己的 Widget 树中:
直接跳转
集成到 Widget 树
import 'package:tencent_live_uikit/tencent_live_uikit.dart';

// 跳转到观众观看页面
Navigator.push(context, MaterialPageRoute(
builder: (BuildContext context) {
final roomId = "test_voice_room_id";
return TUIVoiceRoomWidget(roomId: roomId, behavior: RoomBehavior.join);
}));
// --- 根据您的Widget树结构,选择以下一种方式集成 ---

// [选项一] 作为唯一子Widget(单子树)
// 适用于Container、Padding等通常只包含一个子Widget的容器
Container(
child: TUIVoiceRoomWidget(roomId: roomId, behavior: RoomBehavior.join) // 在此处集成观众观看页
)

// [选项二] 作为多个子Widget之一(多子树)
// 适用于Column、Row、Stack等可以包含多个子Widget的布局
Stack(
children: [
YourOtherWidget(), // 您的其他子Widget
TUIVoiceRoomWidget(roomId: roomId, behavior: RoomBehavior.join), // 在此处集成观众观看页
YourOtherWidget(), // 您的其他子Widget
])
集成后,调用代码即可拉起观众页面并开始播放直播内容,效果如 功能概览 的收听直播图所示。

TUIVoiceRoomWidget 参数说明

参数名
类型
描述
roomId
String
全局唯一的直播间 ID
behavior
RoomBehavior
进房行为:
autoCreate:自动创建直播间并进房。
prepareCreate:先进入开播前预览页,用户点击开始直播后创建直播间并进房。
join:观众进房。
params
RoomParams
主播开播参数,详见下一节。
观众进房(behavior 为 join)时无需配置此参数。
RoomParams 参数说明
参数名
类型
描述
maxSeatCount
int
直播间最大麦位数。
seatMode
TUISeatMode
观众的上麦模式:
applyToTake:观众需要申请,主播同意后上麦
freeToTake:观众自由上麦,无需主播同意。

步骤4:(可选)添加浮窗版观众观看页面

TUIVoiceRoomOverlay 是支持浮窗模式的观看页面。在观看直播期间,可以切换到应用内浮窗模式。TUIVoiceRoomOverlay是基于 Flutter 官方 API Overlay 实现的,具体接入流程如下:

1. App 新增二级导航器

参考 浮窗版直播间配置,在 App 中新增二级导航器。二级导航器用于承载直播页面,使其能够独立于主导航栈,实现浮窗效果。

2. 跳转浮窗版观众观看页面

在您需要观众进房的调用入口(具体由您的业务决定),执行如下操作,跳转到观看页面。
import 'package:tencent_live_uikit/tencent_live_uikit.dart';

// 跳转到观看页面
Navigator.push(context, MaterialPageRoute(
builder: (BuildContext context) {
final roomId = "test_voice_room_id";
return TUIVoiceRoomOverlay(roomId: roomId, behavior: RoomBehavior.join);
}));
说明:
1. TUIVoiceRoomOverlay 不支持作为子 widget 嵌入到容器类 widget (例如:Container、Stack 等),只能作为独立页面跳转。因为内部使用了 Overlay,LiveKit 需要操控整个 Overlay 页面来切换浮窗模式。
2. 语聊场景不支持应用外浮窗模式。

浮窗模式效果

点击观看页面右上角的浮窗按钮,进入浮窗模式,效果如图所示:


自定义界面布局

文案定制

TUILiveKit 使用 ARB 文件和 Flutter 标准国际化方案来管理 UI 文案显示。您可以直接编辑 livekit/lib/common/language/i10n/ 目录下的 ARB 文件来修改需要调整的文案:

livekit_en.arb:英文文案。
livekit_zh.arb:简体中文文案。
livekit_zh_Hant.arb:繁体中文文案。
修改后通过命令行执行 flutter gen-l10n 重新生成本地化代码即可。生成成功后,livekit/lib/common/language/gen/ 目录里的代码文件将会刷新。

图标定制

TUILiveKit UI 所需的图片资源在 livekit/assets/images/ 目录下管理,您可以直接替换该目录下的 PNG 图片文件来快速修改自定义界面所需的图标。

重新构建并运行应用,即可看到更新的图标。

下一步

恭喜您,现在您已经成功集成了观众观看功能。接下来,您可以实现主播开播直播列表礼物系统等功能,可参考下表:
功能
描述
集成指引
主播开播
主播开播全流程功能,包括开播前的准备和开播后的各种互动
直播列表
展示直播列表界面和功能,包含直播列表,房间信息展示功能
礼物系统
实现自定义礼物素材配置、计费系统对接、PK 场景互动等功能

常见问题

观众发送弹幕时,直播间内其他观众看不到弹幕内容?

原因 1: 先检查网络连接,确保观众设备网络正常。
原因 2: 该观众被主播禁言,无法发送弹幕。
原因 3:观众的弹幕内容涉及到关键词屏蔽,请确认观众发送的弹幕内容是否符合直播间规则。

弹窗无法展示或被遮挡?

如果您接入了TUIVoiceRoomOverlay,请确保弹窗(BottomSheet、Dialog 等)的 context 来自于 rootNavigator(建议使用 Global.appContext())。由于直播页面 Overlay 是在 secondaryNavigator 上,如果弹窗的 context 来自于 secondaryNavigator,那么弹窗将会被 Overlay 遮挡。因为同一个 Navigator 上,Overlay 的层级比普通页面要高,这样 Overlay 才能浮在普通页面的上层。