TUILiveKit 直播弹幕为直播场景提供完整互动解决方案,能够增强直播的互动性和趣味性。通过本文档,您可快速实现直播间弹幕互动功能,并支持深度定制以满足业务需求。弹幕消息发送组件(BarrageSendWidget) | 弹幕消息展示组件(BarrageDisplayWidget) |
![]() | ![]() |
组件名称 | 具体内容 |
弹幕消息组件(BarrageDisplayWidget) | 负责实时展示和管理弹幕消息流的组件,提供消息列表渲染、时间聚合、用户交互和响应式适配等完整的消息展示解决方案。 |
消息发送组件(BarrageSendWidget) | 提供富文本编辑和消息发送功能的输入组件,集成表情选择器、字符限制、状态管理和跨平台适配,为用户提供流畅的消息输入体验。 |
BarrageSendWidget 组件并添加到您的视图:import 'package:live_uikit_barrage/live_uikit_barrage.dart';BarrageSendController _sendController = BarrageSendController(roomId: "liveRoomId", /// liveRoomId 替换为您的直播间IDownerId: "liveOwnerId", /// liveOwnerId 替换为您的直播间主播IDselfUserId: "selfUserId", /// selfUserId 替换为您的当前登录的用户IDselfName: "selfUserName"); /// selfUserName 替换为您的当前登录的用户昵称BarrageSendWidget(controller: _sendController);
TUILiveKit 工程中不包含大表情元素切图,正式上线商用前请您替换为自己设计或拥有版权的其他表情包。下图所示默认的小黄脸表情包版权归腾讯云所有,可有偿授权使用,如果需要获得授权可 提交工单 联系我们。
BarrageDisplayWidget 来展示弹幕消息。ownerId 用于区分房主和观众的显示效果。import 'package:live_uikit_barrage/live_uikit_barrage.dart';BarrageDisplayController _displayController = BarrageDisplayController(roomId: "liveRoomId", /// liveRoomId 替换为您的直播间IDownerId: "liveOwnerId", /// liveOwnerId 替换为您的直播间主播IDselfUserId: "selfUserId", /// selfUserId 替换为您的当前登录的用户IDselfName: "selfUserName"); /// selfUserName 替换为您的当前登录的用户昵称BarrageDisplayWidget(controller: _displayController);
BarrageDisplayWidget 提供了 insertMessage 接口,用于插入自定义消息(例如礼物消息、直播间公告等)。您可以通过自定义样式实现不同的展示效果。import 'package:live_uikit_barrage/live_uikit_barrage.dart';import 'package:atomic_x_core/atomicxcore.dart';Barrage barrage = Barrage();barrage.textContent = "gift";barrage.sender.userID = "sender.userId";barrage.sender.userName = "sender.userName";barrage.sender.avatarURL = "sender.avatarUrl";_displayController.insertMessage(barrage);

BarrageDisplayWidget 的代理方法 CustomBarrageBuilder。import 'package:flutter/cupertino.dart';import 'package:flutter/material.dart';import 'package:live_uikit_barrage/live_uikit_barrage.dart';import 'package:atomic_x_core/atomicxcore.dart';// 1. 实现 CustomBarrageBuilderclass MyCustomBarrageItemBuilder extends CustomBarrageBuilder {@overridebool shouldCustomizeBarrageItem(Barrage barrage) {// 例如:只对带有 customType=type1 标记的弹幕做自定义渲染return barrage.extensionInfo['customType'] == 'type1';}@overrideWidget buildWidget(BuildContext context, Barrage barrage) {// 自定义 Widgetfinal type = barrage.extensionInfo['customType'];if (type == 'type1') {return Container();}return SizedBox.shrink();}}// 2. 设置自定义 Builder_displayController.setCustomBarrageBuilder(MyCustomBarrageItemBuilder());// 3. 插入自定义消息Barrage barrage = Barrage();barrage.textContent = "gift";barrage.sender.userID = "sender.userId";barrage.sender.userName = "sender.userName";barrage.sender.avatarURL = "sender.avatarUrl";barrage.extensionInfo['customType'] = 'type1';_displayController.insertMessage(barrage);
BarrageSendWidget 和 BarrageDisplayWidget,并且传递了正确的 roomID。BarrageDisplayWidget 时,您需要传入 ownerId 参数。组件会根据 ownerId 自动识别房主发送的弹幕,并应用不同的样式。您也可以通过自定义弹幕样式,根据 Barrage 消息中的 user.userId 字段来判断是否为房主,并显示您想要的特定效果。文档反馈