# im_plugin_tencent_web
**Repository Path**: nx6313/im_plugin_tencent_web
## Basic Information
- **Project Name**: im_plugin_tencent_web
- **Description**: 封装的供 flutter 使用的web版本的腾讯IM web端插件
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-08-14
- **Last Updated**: 2026-09-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# im_plugin_tencent_web
A Flutter plugin that inherits from Tencent IM
#### 聊天互动使用:[@tencentcloud/lite-chat](https://cloud.tencent.com/document/product/269/75285) (无UI)进行集成
#### 音视频通话使用:[TUICallEngine](https://web.sdk.qcloud.com/component/trtccalling/doc/TUICallEngine/web/zh-cn/tutorial-00-%E5%AE%9E%E7%8E%B0%E5%8F%8C%E4%BA%BA%E9%80%9A%E8%AF%9D.html) (无UI)进行集成
---
## 预览示例
如果您或您的公司有现成可用的 腾讯IM 即时通讯 服务,
那么您可以点击下面的示例去看看效果。
使用 腾讯IM 即时通讯 的相关参数 登录后就能看到效果啦 🤩🤩🤩🤪
放心登录,别担心,因为这只是示例项目,不会记录任何您的个人资料信息,我保证 😁
[👉 点击去查看示例效果](https://im-plugin-tencent-web-example.1823052143.workers.dev/)
🎃🍟😋 如果无法查看,那应该就是当天的免费浏览额度用完了,要不您明天再来? 🎉
---
## 使用前准备
### 第一步
引入插件包
```dart
dependencies:
im_plugin_tencent_web: 最新版本号
// 通过命令
flutter pub add im_plugin_tencent_web
```
### 第二步
下载并复制以下文件到项目的 web 目录下
##### [im_plugin.bundle.js](https://gitee.com/nx6313/im_plugin_tencent_web/blob/master/web/im_plugin.bundle.js)
### 第三步
在 web/index.html 的 head之间添加下面的代码
```javascript
```
---
## 开始使用
共有两种使用方式(选择你需要的方式就可以)
### 仅 API 调用的方式
#### 初始化IM
```dart
import 'package:im_plugin_tencent_web/im_plugin_tencent_web.dart';
import 'package:im_plugin_tencent_web/im/event_chat_listener_config.dart';
import 'package:im_plugin_tencent_web/im/event_call_listener_config.dart';
ImPluginTencentWeb.initSdk(
sdkAppID: 0,
initCall: true, // 是否同时初始化 im Call,默认 true
eventChatListener: EventChatListenerConfig(),
eventCallListener: EventCallListenerConfig(), // initCall 为 false 时,可以忽略
);
```
[chat 可传入的事件列表](https://web.sdk.qcloud.com/im/doc/v3/zh-cn/module-EVENT.html)
[call 可传入的事件列表](https://web.sdk.qcloud.com/component/trtccalling/doc/TUICallEngine/web/zh-cn/module-TUICallEvent.html)
#### 登录IM
```dart
import 'package:im_plugin_tencent_web/im_plugin_tencent_web.dart';
try {
await ImPluginTencentWeb.login(
userID: '',
userSig: '',
);
} catch(err) {
print('登录出错:$err');
}
```
#### 登出IM
```dart
import 'package:im_plugin_tencent_web/im_plugin_tencent_web.dart';
try {
await ImPluginTencentWeb.logout();
} catch(err) {
print('登出出错:$err');
}
```
#### 销毁IM
```dart
import 'package:im_plugin_tencent_web/im_plugin_tencent_web.dart';
try {
await ImPluginTencentWeb.destroy();
} catch(err) {
print('销毁出错:$err');
}
```
#### 获取会话列表
```dart
import 'package:im_plugin_tencent_web/im_plugin_tencent_web.dart';
import 'package:im_plugin_tencent_web/model/conversation_item_entity.dart';
try {
final res = await ImPluginTencentWeb.getConversationList();
List list = res['conversationList'];
List getConversationList = list.map((item) => ConversationItemEntity.fromJson(item)).toList();
} catch(err) {
print('获取会话列表出错:$err');
}
```
#### 清空会话未读消息数
```dart
import 'package:im_plugin_tencent_web/im_plugin_tencent_web.dart';
ImPluginTencentWeb.setMessageRead({
required String conversationID // 会话ID
});
```
#### 拉取消息列表
```dart
import 'package:im_plugin_tencent_web/im_plugin_tencent_web.dart';
import 'package:im_plugin_tencent_web/model/message_item_entity.dart';
try {
final res = await ImPluginTencentWeb.getMessageList({
required String conversationID, // 会话ID
String? nextReqMessageID // 拉取下一页时传入。传入上一次请求拿到的 nextReqMessageID
});
List messageList = res['messageList'];
String nextReqMessageID = res['nextReqMessageID'];
List getMsgList = messageList.map((item) => MessageItemEntity.fromJson(item)).toList();
} catch(err) {
print('拉取消息列表出错:$err');
}
```
#### 发送消息
```dart
import 'package:im_plugin_tencent_web/im_plugin_tencent_web.dart';
import 'package:im_plugin_tencent_web/im/create_msg_info.dart';
import 'package:im_plugin_tencent_web/model/message_item_entity.dart';
try {
final res = await ImPluginTencentWeb.sendMessage({
required CreateMsgType createMsgType, // 发送消息的类型
required CreateMsgInfo createMsgInfo, // 发送消息的数据构造
Map? options // 发送消息的配置参数
});
Map msg = Map.from(res['message']);
MessageItemEntity messageInfo = MessageItemEntity.fromJson(msg);
} catch(err) {
print('发送消息出错:$err');
}
```
[创建消息参考](https://cloud.tencent.com/document/product/269/75316#.E5.8F.91.E9.80.81.E6.B6.88.E6.81.AF)
#### 拨打音视频通话
```dart
import 'package:im_plugin_tencent_web/im_plugin_tencent_web.dart';
try {
final res = await ImPluginTencentWeb.call({
required CallType callType,
required List userIdList, // 邀请列表
String? chatGroupId, // IM 群组 / 会话 ID
String? roomId, // 房间号
String? userData, // 扩展字段: 用于在邀请信令中增加扩展信息
Map? offlinePushInfo
});
} catch(err) {
print('拨打音视频通话出错:$err');
}
```
### 带 UI 的使用方式
#### 在使用UI之前, 你必须先进行IM的初始化与登录流程
在登录业务完成后
```dart
import 'package:im_plugin_tencent_web/im/init.dart';
import 'package:im_plugin_tencent_web/im/event_chat_listener_config.dart';
import 'package:im_plugin_tencent_web/im/event_call_listener_config.dart';
try {
await doImTencentWebPluginInit(
sdkAppId: 0,
initCall: true, // 是否初始化音视频通话,默认 true
eventChatListener: EventChatListenerConfig(), // 可不传。聊天事件监听
eventCallListener: EventCallListenerConfig(), // 可不传。音视频通话事件监听
userId, // 登录 userId
userSig, // 登录 userSig
);
} catch (err) {
// 收到 IM 登录异常的情况下,进行进一步处理
// 比如:提示用户重试 或 提示登录im失败 或 提示登录im的账号信息有误
}
```
在浏览器每次刷新都会执行的地方这样做
```dart
import 'package:im_plugin_tencent_web/im/init.dart';
import 'package:im_plugin_tencent_web/im/event_chat_listener_config.dart';
import 'package:im_plugin_tencent_web/im/event_call_listener_config.dart';
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
try {
// 不需要传入任何参数,此时会从浏览器会话缓存中读取im相关参数,进行im初始化与im自动登录
await doImTencentWebPluginInit();
// 如果担心用户手贱清除了浏览器的 sessionStorage 缓存导致不传参数的方式调用失败,也可以传入全量的参数
await doImTencentWebPluginInit(
sdkAppId: 0,
initCall: true, // 是否初始化音视频通话,默认 true
eventChatListener: EventChatListenerConfig(), // 可不传。聊天事件监听
eventCallListener: EventCallListenerConfig(), // 可不传。音视频通话事件监听
userId, // 登录 userId
userSig, // 登录 userSig
);
} catch (err) {
// 收到 IM 登录异常的情况下,进行进一步处理
// 比如:提示用户后,退出返回到登录页面 或 静默进行 im 的登录重试
}
});
}
```

#### 经典组合UI的使用方式
```dart
import 'package:im_plugin_tencent_web/widget/conversation_list.dart';
import 'package:im_plugin_tencent_web/widget/chat.dart';
Row(
children: [
SizedBox(
width: 300,
child: ConversationListWidget(),
),
Expanded(
child: ChatWidget(),
),
],
)
```
---

#### 会话列表UI的使用方式
```dart
import 'package:im_plugin_tencent_web/widget/conversation_list.dart';
SizedBox(
width: 300,
child: ConversationListWidget(),
)
```
---

#### 聊天窗口UI的使用方式
```dart
import 'package:im_plugin_tencent_web/widget/chat.dart';
SizedBox(
width: 800,
child: ChatWidget(),
)
```