diff --git a/.idea/flutter_openim_sdk.iml b/.idea/flutter_openim_sdk.iml
index c03edf4..4ff31a5 100644
--- a/.idea/flutter_openim_sdk.iml
+++ b/.idea/flutter_openim_sdk.iml
@@ -20,6 +20,5 @@
-
\ No newline at end of file
diff --git a/.idea/libraries/Dart_Packages.xml b/.idea/libraries/Dart_Packages.xml
deleted file mode 100644
index f03fdfd..0000000
--- a/.idea/libraries/Dart_Packages.xml
+++ /dev/null
@@ -1,196 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Flutter_Plugins.xml b/.idea/libraries/Flutter_Plugins.xml
index b0f6971..53449da 100644
--- a/.idea/libraries/Flutter_Plugins.xml
+++ b/.idea/libraries/Flutter_Plugins.xml
@@ -1,6 +1,8 @@
-
+
+
+
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 41cc7d8..9681f75 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
## 0.0.1
* TODO: Describe initial release.
+
+### 0.0.2
+
+1,将 markSingleMessageHasRead、markGroupMessageHasRead和getTotalUnreadMsgCount方法从类MessageManager移动到类ConversationManager。
+2,修改setFriendInfo方法的参数。
+3,修改createGroup和setGroupInfo方法的参数。
diff --git a/README.zh-cn.md b/README.zh-cn.md
index 26bf688..cce534c 100644
--- a/README.zh-cn.md
+++ b/README.zh-cn.md
@@ -1,6 +1,12 @@
-## 1,初始化
+# 1. 初始化与登录
+
+
+
+## 1.1. initSDK
+
+初始化OpenIM SDK,设置SDK网络连接地址以及本地数据存放目录等。
```
OpenIM.iMManager.initSDK(
@@ -32,41 +38,20 @@ OpenIM.iMManager.initSDK(
);
```
-初始化接口包含五个必填参数 (platform,ipApi,ipWs,dbPath,listener)
-
-#### platform
-
-类IMPlatform的值
-
-```
-class IMPlatform {
- static const ios = 1;
- static const android = 2;
- static const windows = 3;
- static const xos = 4;
- static const web = 5;
- static const mini_web = 6;
- static const linux = 7;
-}
-```
-
-#### ipApi
-
-SDK的API接口地址。如:http:xxx:10000
-
-#### ipWs
+- 参数说明:
-SDK的web socket地址。如: ws:xxx:17778
+| 名称 | 类型 | 描述 |
+| -------- | ----------------- | ------------------------------------------------------------ |
+| platform | int | 平台类型:IMPlatform类 |
+| ipApi | String | SDK的API接口地址。如:http:xxx:10000 |
+| ipWs | String | SDK的web socket地址。如: ws:xxx:17778 |
+| dbPath | String | 数据存储路径。如:var apath =(await getApplicationDocumentsDirectory()).path |
+| listener | OnInitSDKListener | SDK初始化监听 |
-#### dbPath
+ 注:在创建图片,语音,视频,文件等需要路径参数的消息体时,如果选择的是非全路径方法如:createSoundMessage(全路径方法为:createSoundMessageFromFullPath),需要将文件自行拷贝到dbPath目录下,如果此时文件路径为 apath+"/sound/a.mp3",则参数path的值为:/sound/a.mp3。如果选择的全路径方法,路径为你文件的实际路径不需要再拷贝。
-数据缓存路径。如:var apath =(await getApplicationDocumentsDirectory()).path
+- OnInitSDKListener
- 注:在创建图片,语音,视频,文件等需要路径参数的消息体时,如果选择的是非全路径方法如:createSoundMessage(全路径方法为:createSoundMessageFromFullPath),需要将文件自行拷贝到apath目录下,如果此时文件路径为 apath+"/sound/a.mp3",则参数path的值为:/sound/a.mp3。如果选择的全路径方法,路径为你文件的实际路径不需要再拷贝。
-
-#### listener
-
-初始化监听回调
| 事件回调 | 事件描述 | 推荐操作 |
| ----------------- | ------------------------ | ------------------------------------------------------------ |
@@ -77,745 +62,1556 @@ SDK的web socket地址。如: ws:xxx:17778
| onUserSigExpired | 登录票据已经过期 | 请使用新签发的 UserSig 进行登录。 |
| onSelfInfoUpdated | 当前用户的资料发生了更新 | 可以在 UI 上更新自己的头像和昵称。 |
-### 2,登录
+- 返回值说明:
+
+initSDK方法返回Future对象
```
-OpenIM.iMManager.login(uid: uid, token: token);
+futrue.then((value) => '初始化成功').catchError((e)=>'初始化失败')
```
-参数uid跟token为必传参数,它们的值通过接口地址 http://xxx/auth/user_token获取
-#### 获取当前用户id
+
+## 1.2. login
+
+使用用户ID(uid)和token登录,uid来自于自身业务服务器,token需要业务服务器根据secret向OpenIM服务端交换获取。
```
-OpenIM.iMManager.getLoginUid()
+ OpenIM.iMManager.login(uid: uid, token: token);
```
-#### 获取当前用户信息
+- 参数说明
+
+| 名称 | 类型 | 描述 |
+| ----- | ------ | --------- |
+| uid | String | 用户ID |
+| token | String | 用户token |
+
+- 返回值说明:
+
+login方法返回Future对象
```
-OpenIM.iMManager.getLoginUserInfo();
+futrue.then((value) => '登录成功').catchError((e)=>'登录失败')
```
-#### 获取登录状态
+
+
+## 1.3. logout
+
+登出OpenIM,通常在切换账号的时候调用,清除登录态以及内存中的所有数据。
```
-OpenIM.iMManager.getLoginStatus();
+OpenIM.iMManager.logout();
```
-### 3,会话
+- 返回值说明:
-#### 拉取当前所有的会话记录,返回Future>
+logout方法返回Future对象
```
-OpenIM.iMManager.conversationManager.getAllConversationList()
+futrue.then((value) => '登出成功').catchError((e)=>'登出失败')
```
-如果你想获取单个回话使用方法getSingleConversation,该方法有两个必传参数sourceID和sessionType。sourceID:如果是单聊其值为单聊对象的userId;如果是群聊其值为群的groupId。sessionType:如果是单聊sessionType=1;群聊sessionType=2。
-如果你想获取多个回话使用方法getMultipleConversation,参数多个回话id
-#### 删除会话
+## 1.4. getLoginStatus
-执行此操作会触发会话记录发生改变回调。
+获取当前用户登录状态。
```
-OpenIM.iMManager.conversationManager.deleteConversation(
- conversationID: conversationID,
-);
+OpenIM.iMManager.getLoginStatus();
```
-参数当前被删除的会话的id
+- 返回值说明:
-#### 置顶会话
-
-执行此操作会触发会话记录发生改变回调。
+getLoginStatus方法返回Future对象
```
-OpenIM.iMManager.conversationManager.pinConversation(
- conversationID: conversationID,
- isPinned: true,
-);
+futrue.then((value){
+ if(value == 101){
+ // 登录成功
+ }
+})
```
-isPinned:true置顶,false取消置顶。
-注:ConversationInfo对象里的isPinned字段,isPinned==1代表置顶
-#### 设置草稿
+## 1.5. getLoginUid
-执行此操作会触发会话记录发生改变回调。
+获取当前登录用户ID。
```
-OpenIM.iMManager.conversationManager.setConversationDraft(
- conversationID: conversationID,
- draftText: draftText,
-);
+var uid = await OpenIM.iMManager.getLoginUid()
```
-draftText(草稿):未完成发送的消息内容。
-#### 设置会话监听
-会话记录发生改变时回调。
+## 1.6. getLoginUserInfo
+
+获取当前登录用户的信息
```
-OpenIM.iMManager.conversationManager.setConversationListener(OnConversationListener(
- conversationChanged: (list){
- // 会话记录改变
- },
- newConversation: (list){
- // 新增会话
- },
- totalUnreadMsgCountChanged: (count){
- // 未读消息总数改变
- },
- syncServerFailed: () {},
- syncServerFinish: () {},
- syncServerStart: () {},
-));
+var userInfo = await OpenIM.iMManager.getLoginUserInfo();
```
-| 事件回调 | 事件描述 | 推荐操作 |
-| -------------------------- | -------------------- | -------------- |
-| conversationChanged | 会话记录发生改变 | 刷新会话列表 |
-| newConversation | 有新的会话被添加 | 刷新会话列表 |
-| totalUnreadMsgCountChanged | 未读消息总数发生改变 | 刷新消息未读数 |
-### 4,好友关系
-#### 查询好友列表,返回Future>
+## 1.7. setSelfInfo
+
+修改当前登录用户信息
```
-OpenIM.iMManager.friendshipManager.getFriendList();
+var result = await OpenIM.iMManager.setSelfInfo(info)
```
-如果需要做联系人A-Z列表效果,推荐使用方法getFriendListMap, 该方法返回值为Future> ,然后再将list转换为你自己的List Object,如:
+参数说明:
-```
-OpenIM.iMManager.friendshipManager.getFriendListMap()
- .then((list) => list.map((e) => ContactsInfo.fromJson(e)).toList());
-```
+| 名称 | 类型 | 描述 |
+| ---- | -------- | ------------ |
+| info | UserInfo | 用户信息对象 |
-#### 添加好友
-```
-OpenIM.iMManager.friendshipManager.addFriend(uid: uid, reason: reason);
-```
-uid必传参数,值为被添加的用户uid。reason:添加说明,非必传参数。返回Future,执行then方法为添加成功,执行cathError方法为添加失败。
+## 1.8. unInitSDK
-#### 删除好友
+取消初始化,一般用于在初始化后需要重新初始化
```
-OpenIM.iMManager.friendshipManager.deleteFromFriendList(uid: uid);
+OpenIM.iMManager.unInitSDK();
```
-返回Future,执行then方法为删除成功,执行cathError方法为删除失败。
-#### 检查好友关系
-返回Future>
+# 2. 用户资料
-```
-OpenIM.iMManager.friendshipManager.checkFriend([id1,id2, ...]);
-```
-根据类UserInfo的flag字段判断。flag == 1:是好友关系,其他非好友关系。
-#### 获取好友信息
+## 2.1. getUsersInfo
-返回Future>
+根据用户ID批量获取用户信息
```
-OpenIM.iMManager.getFriendsInfo([id1,id2, ...]);
+List list = await OpenIM.iMManager.getUsersInfo(uidList);
```
-#### 为好友添加备注
+- 参数说明:
-```
-OpenIM.iMManager.friendshipManager.setFriendInfo(info: UserInfo(uid: uid, comment: ’这是备注‘))
-```
+| 名称 | 类型 | 描述 |
+| ------- | -------------- | ---------- |
+| uidList | List< String > | 用户ID集合 |
-参数info:UserInfo类,uid:好友的id,comment:备注。
+- 返回值说明:
-注:只能为好友添加备注,其他好友信息无权限修改。
+| 类型 | 描述 |
+| ----------------------- | ------------ |
+| Future> | 用户信息列表 |
-#### 获取好友申请列表
-返回Future>
-```
-OpenIM.iMManager.friendshipManager.getFriendApplicationList();
-```
+# 3. 消息
-类UserInfo的flag字段:flag == 0:等待处理;flag == 1:已添加;flag == -1:已拒绝。
-注:新朋友的红点数通过计算列表里flag == 0的item的数量。
-#### 同意被加为好友
+## 3.1. createTextMessage
+
+创建一条文字消息。
```
-OpenIM.iMManager.friendshipManager.acceptFriendApplication(uid: uid)
+Message message = await OpenIM.iMManager.messageManager.createTextMessage( text: '这里是消息内容',)
```
-uid:为好友申请列表返回的数据里UserInfo类的uid字段。返回Future,执行then方法为操作成功,执行cathError方法为操作失败。
+- 参数说明:
-#### 拒绝被加为好友
+| 名称 | 类型 | 描述 |
+| ---- | ------ | -------- |
+| text | String | 消息内容 |
+
+返回值说明:
+
+| 类型 | 描述 |
+| ---------------- | -------- |
+| Future< Message> | 消息对象 |
-```
-OpenIM.iMManager.friendshipManager.refuseFriendApplication(uid: uid)
-```
-返回Future,执行then方法为操作成功,执行cathError方法为操作失败。
-#### 黑名单列表
+## 3.2. createTextAtMessage
-返回Future>
+创建一条@消息
```
-OpenIM.iMManager.friendshipManager.getBlackList();
+Message message = await OpenIM.iMManager.messageManager.createTextAtMessage( text: '消息内容', atUidList: [uid1,uid2,...],);
```
-注:如果好友被拉进黑名单,调用getFriendList 或 getFriendListMap方法得到好友包含了黑名单的人,需要通过UserInfo类的isInBlackList字段筛选,如果isInBlackList == 1说明被拉入黑名单。
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| --------- | ------------- | ---------------- |
+| text | String | 消息内容 |
+| atUidList | List< String> | 选择的用户id集合 |
+
+
-#### 拉入黑名单
+## 3.3. createImageMessage
+
+创建图片消息
```
-OpenIM.iMManager.friendshipManager.addToBlackList(uid: uid)
+Message message = await OpenIM.iMManager.messageManager.createImageMessage( imagePath: '图片的相对路径',)
```
-#### 从黑名单移除
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| --------- | ------ | -------------- |
+| imagePath | String | 图片的相对路径 |
+
+注:initSDK时传入了数据缓存路径,如路径:A,这时需要你将图片复制到A路径下后,如 A/pic/a.png路径,imagePath的值:“/pic/a.png”。
+
+
+
+## 3.4. createImageMessageFromFullPath
+
+创建图片消息(绝对路径)
```
-OpenIM.iMManager.friendshipManager.deleteFromBlackList(uid: uid);
+Message message = await OpenIM.iMManager.messageManager.createImageMessageFromFullPath( imagePath: path,)
```
-#### 设置关系改变监听
-
-```
-OpenIM.iMManager.friendshipManager.setFriendshipListener(OnFriendshipListener(
- blackListAdd: (u){
- // 好友被加入黑名时单回调
- },
- blackListDeleted: (u){
- // 好友从黑名单移除时回调
- },
- friendApplicationListAccept: (u){
- // 发起的好友请求被接受时回调
- },
- friendApplicationListAdded: (u){
- // 我接受被人的发起的好友请求时回调
- },
- friendApplicationListDeleted: (u){
- // 删除好友请求时回调
- },
- friendApplicationListReject: (u){
- // 请求被拒绝回调
- },
- friendInfoChanged: (u){
- // 好友资料发生变化时回调
- },
- friendListAdded: (u){
- // 已添加好友回调
- },
- friendListDeleted: (u){
- // 好友被删除时回调
- },
-));
-```
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| --------- | ------ | ------------------------ |
+| imagePath | String | 图片在设备上的的绝对路径 |
+
+此方法不需要拷贝,推荐使用。
-| 事件回调 | 事件描述 | 推荐操作 |
-| ---------------------------- | -------------------------- | ---------------------------------- |
-| blackListAdd | 好友被加入黑名 | 刷新好友列表或黑名单列表 |
-| blackListDeleted | 好友从黑名单移除 | 刷新好友列表或黑名单列表 |
-| friendApplicationListAccept | 发起的好友请求被接受 | 刷新好友请求列表 |
-| friendApplicationListAdded | 我接受被人的发起的好友请求 | 刷新好友请求列表 |
-| friendApplicationListDeleted | 删除好友请求 | 刷新好友请求列表 |
-| friendApplicationListReject | 请求被拒绝 | 刷新好友请求列表 |
-| friendInfoChanged | 好友资料发生变化 | 刷新好友列表,好友信息或黑名单列表 |
-| friendListAdded | 已成为好友 | 刷新好友列表 |
-| friendListDeleted | 好友被删除 | 刷新好友列表 |
-### 5,群关系
-#### 获取已加入的群列表
+## 3.5. createSoundMessage
-返回Future>
+创建语音消息
```
-OpenIM.iMManager.groupManager.getJoinedGroupList();
+Message message = await OpenIM.iMManager.messageManager.createSoundMessage( soundPath: '相对路径', duration: '语音时长,单位秒',)
```
-如果类GroupInfo的ownerId字段的值跟当前用户的uid一致,则当前用户就是群的发起者。否则是参与者。
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| --------- | ------ | ---------------- |
+| soundPath | String | 相对路径 |
+| duration | int | 语音时长,单位秒 |
+
+注:initSDK时传入了数据缓存路径,如路径:A,这时需要你将语音文件复制到A路径下后,如 A/sound/a.m4a路径,soundPath的值:“/sound/a.m4a”。
-#### 创建群
+
+
+## 3.6. createSoundMessageFromFullPath
+
+创建语音消息(绝对路径)
```
-OpenIM.iMManager.groupManager.createGroup(
- groupInfo: info,
- list: roles,
-)
+Message message = await OpenIM.iMManager.messageManager.createSoundMessageFromFullPath( soundPath: '在设备上的的实际路径', duration: '语音时长,单位秒',)
```
-参数info(GroupInfo):群资料,非必传;参数roles(List)在发起群聊时选择的群成员列表,必传字段。
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| --------- | ------ | -------------------- |
+| soundPath | String | 在设备上的的绝对路径 |
+| duration | int | 语音时长,单位秒 |
-GroupInfo类字段说明:groupName群名;notification群公告;introduction群介绍;faceUrl群icon。
+此方法不需要拷贝,推荐使用。
-GroupMemberRole类字段说明:setRole:0:普通成员 2:管理员;uid:成员的uid。
-#### 获取群信息
-根据群id获取群的信息,返回Future>
+## 3.7. createVideoMessage
+
+创建视频消息
```
-OpenIM.iMManager.groupManager.getGroupsInfo(gidList: [gid1,gid2,...]);
+Message message = await OpenIM.iMManager.messageManager.createVideoMessage( videoPath: '相对路径', videoType: '文件的mineType', duration: '视频时长,单位秒', snapshotPath: '视频的缩略图', )
```
-#### 设置群信息
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| ------------ | ------ | ---------------- |
+| videoPath | String | 相对路径 |
+| videoType | String | 文件的mineType |
+| duration | int | 视频时长,单位秒 |
+| snapshotPath | String | 视频的缩略图 |
+
+注:initSDK时传入了数据缓存路径,如路径:A,这时需要你将视频文件复制到A路径下后,如 A/video/a.mp4路径,videoPath的值:“/video/a.mp4”
+
+
+
+## 3.8. createVideoMessageFromFullPath
+
+创建视频消息(绝对路径)
```
-OpenIM.iMManager.groupManager.setGroupInfo(groupInfo: gInfo)
+Message message = await OpenIM.iMManager.messageManager.createVideoMessageFromFullPath( videoPath: '在设备上的的实际路径', videoType: '文件的mineType', duration: '视频时长,单位秒', snapshotPath: '视频的缩略图',)
```
-只能设置群的名称(groupName),公告(notification),介绍(introduction)和icon(faceUrl)。groupID为系统生成的ID不能更改。ownerId也不能修改,修改群的拥有者需要调用群权限交接方法transferGroupOwner。
+- 参数说明:
-#### 获取群成员列表
+| 名称 | 类型 | 描述 |
+| ------------ | ------ | -------------------- |
+| videoPath | String | 在设备上的的绝对路径 |
+| videoType | String | 文件的mineType |
+| duration | int | 视频时长,单位秒 |
+| snapshotPath | String | 视频的缩略图 |
-返回Future ,GroupMembersList类的nextSeq字段:下一页的开始index。data字段:群成员。
+此方法不需要拷贝,推荐使用。
+
+
+
+## 3.9. createFileMessage
+
+创建文件消息
```
-OpenIM.iMManager.groupManager.getGroupMemberList(groupId: gid)
+Message message = await OpenIM.iMManager.messageManager.createFileMessage( filePath: '相对路径', fileName: '文件名',);
```
-groupId:群id,必传。
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| -------- | ------ | -------- |
+| filePath | String | 相对路径 |
+| fileName | String | 文件名 |
+
+注:initSDK时传入了数据缓存路径,如路径:A,这时需要你将视频文件复制到A路径下后,如 A/file/a.txt路径,filePath的值:“/file/a.txt”
+
-filter:过滤成员,0不过滤,1群的创建者,2管理员, 非必传,默认值0。
-next:分页,从哪一条开始获取,默认值0。参照nextSeq的值。
+## 3.10. createFileMessageFromFullPath
-#### 邀请进群
+创建文件消息(绝对路径)
```
-OpenIM.iMManager.groupManager.inviteUserToGroup(
- groupId: gid,
- uidList: uidList,
- reason: reason,
-);
+Message message = await OpenIM.iMManager.messageManager.createFileMessageFromFullPath( filePath: '在设备上的的绝对路径', fileName: '文件名',)
```
-gid:群的id,uidList:被邀请的好友uid,reason:邀请说明。
+- 参数说明:
-#### 踢出群
+| 名称 | 类型 | 描述 |
+| -------- | ------ | -------------------- |
+| filePath | String | 在设备上的的绝对路径 |
+| fileName | String | 文件名 |
+
+此方法不需要拷贝,推荐使用。
+
+
+
+## 3.11. createLocationMessage
+
+创建位置消息
```
-OpenIM.iMManager.groupManager.kickGroupMember(
- groupId: gid,
- uidList: uidList,
- reason: reason,
-);
+Message message = await OpenIM.iMManager.messageManager.createLocationMessage( latitude: ’纬度‘, longitude: ’经度‘, description: ’描述信息,可以根据自己的需求传任何数据‘,)
```
-#### 申请加群
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| ----------- | ------ | -------------------------------------- |
+| latitude | double | 纬度 |
+| longitude | double | 经度 |
+| description | String | 描述信息,可以根据自己的需求传任何数据 |
+
+description:在位置消息展示时,有位置名,位置描述,定位图片信息。推荐 description:{"title":"天府新谷","detail":"四川省高新区石羊街道府城大道西段399号","url":"https://apis.map.qq.com/ws/staticmap/v2/?center=%s&zoom=18&size=600*300&maptype=roadmap&markers=size:large|color:0xFFCCFF|label:k|%s&key=TMNBZ-3CGC6-C6SSL-EJA3B-E2P5Q-V7F6Q"}
+
+
+
+## 3.12. createQuoteMessage
+
+创建引用消息
```
-OpenIM.iMManager.groupManager.joinGroup(gid: gid, reason: null)
+Message message = await OpenIM.iMManager.messageManager.createQuoteMessage( text: '消息内容', quoteMsg: '被引用的消息对象Message',)
```
-#### 变更群拥有者(发起者)
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| -------- | ----------- | ----------------------- |
+| text | String | 消息内容 |
+| quoteMsg | Message对象 | 被引用的消息对象Message |
+
+
+
+## 3.13. createCardMessage
+
+创建名片消息
```
-OpenIM.iMManager.groupManager.transferGroupOwner(gid: gid, uid: uid)
+Message message = await OpenIM.iMManager.messageManager.createCardMessage( data: '用户信息Map',)
```
-uid:新的拥有者uid。此方法只有群的发起者(拥有者)才有权限访问,管理员和普通成员无权限访问。如果是发起者群资料展示可显示群权限转移按钮。
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| ---- | ---- | ------------------------------------------------------------ |
+| data | Map | 如{"uid": uid, 'name': name, 'icon': icon},按需求自定义内容。 |
-#### 退群
+
+
+## 3.14. createMergerMessage
+
+创建合并消息
```
-OpenIM.iMManager.groupManager.quitGroup(gid: gid)
+Message message = await OpenIM.iMManager.messageManager.createMergerMessage( messageList: '被选中的消息', title: '标题', summaryList: '摘要',)
```
-#### 群监听
-
-```
-OpenIM.iMManager.groupManager.setGroupListener(OnGroupListener(
- applicationProcessed: (groupId, opUser, agreeOrReject, opReason){
- // 群申请被处理时回调
- },
- groupCreated: (groupId){
- // 群创建完成时回调
- },
- groupInfoChanged: (groupId, info){
- // 群资料发生变化时回调
- },
- memberEnter: ( groupId, list){
- // 有人进群时回调
- },
- memberInvited: ( groupId, opUser, list){
- // 接受邀请时回调
- },
- memberKicked: ( groupId, opUser, list){
- // 成员被踢出时回调
- },
- memberLeave: ( groupId, info){
- // 群成员退群时回调
- },
- receiveJoinApplication: ( groupId, info, opReason){
- // 收到入群申请
- },
-))
-```
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| ----------- | -------------- | ---------------- |
+| title | String | 标题 |
+| summaryList | List< String> | 摘要 |
+| messageList | List< Message> | 被选中的消息集合 |
-| 事件回调 | 事件描述 | 推荐操作 |
-| ---------------------- | -------------- | -------------- |
-| applicationProcessed | 群申请被处理 | |
-| groupCreated | 群创建完成 | |
-| groupInfoChanged | 群资料发生变化 | 刷新群资料 |
-| memberEnter | 进群 | 刷新群成员列表 |
-| memberInvited | 接受邀请 | 刷新群成员列表 |
-| memberKicked | 成员被踢出 | 刷新群成员列表 |
-| memberLeave | 群成员退群 | 刷新群成员列表 |
-| receiveJoinApplication | 收到入群申请 | |
-### 6,消息
-#### 创建文本消息
+## 3.15. createForwardMessage
-返回Future
+创建转发消息
```
-OpenIM.iMManager.messageManager.createTextMessage(
- text: '这里是消息内容',
-)
+Message message = await OpenIM.iMManager.messageManager.createForwardMessage( message: '被转发的Message',)
```
-#### 创建@消息
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| ------- | ------- | ----------------------- |
+| message | Message | 被选择转发的Message对象 |
+
+
+
+## 3.16. createCustomMessage
-返回Future
+创建自定义消息
```
-OpenIM.iMManager.messageManager.createTextAtMessage(
- text: '消息内容',
- atUidList: [uid1,uid2,...],
-);
+OpenIM.iMManager.messageManager.createCustomMessage( data: '自定义数据', extension: '自定义数据', description: '自定义数据', )
```
-atUidList:被@到的用户uid。
+- 参数说明:
-#### 创建图片消息
+| 名称 | 类型 | 描述 |
+| ----------- | --------- | -------------- |
+| data | Uint8List | 自定义数据数组 |
+| extension | Uint8List | 自定义数据数组 |
+| description | String | 自定义数据 |
-返回Future
+
+
+## 3.17. sendMessage
+
+发送消息
```
-OpenIM.iMManager.messageManager.createImageMessage(
- imagePath: '图片的相对路径',
-)
+OpenIM.iMManager.messageManager .sendMessage( message: message, userID: userId, groupID: groupId, ) .then((value){ // 发送成功 }) .catchError((e){ // 发送失败 })
```
-注:initSDK时传入了数据缓存路径,如路径:A,这时需要你将图片复制到A路径下后,如 A/pic/a.png路径,imagePath的值:“/pic/a.png”。
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| -------------- | ------- | ------------------ |
+| message | Message | 创建的消息结构体 |
+| userID | String | 单聊对象的用户id |
+| groupID | String | 群聊id |
+| onlineUserOnly | Bool | 是否仅在线用户接收 |
+
+注:如果一对一聊天 userID不能为空。如果群聊天groupID不能为空。如果消息发送成功执行then方法,发送失败执行catchError方法。
+
+
-#### 创建图片消息(全路径)
+## 3.18. typingStatusUpdate
-返回Future
+提示用户正在输入
```
-OpenIM.iMManager.messageManager.createImageMessageFromFullPath(
- imagePath: path,
-)
+OpenIM.iMManager.messageManager.typingStatusUpdate( userID: uid, typing: true,)
```
-path: 文件在设备上的的实际路径。此方法不需要拷贝,推荐使用。
+- 参数说明:
-#### 创建语音消息
+| 名称 | 类型 | 描述 |
+| ------ | ------ | ----------------------------------- |
+| userID | String | 单聊对象的用户id |
+| typing | Bool | typing:true正在输入,false停止输入 |
-返回Future
+注:单聊使用此功能,在收到的新消息回调里如果消息类型为typing消息且typing == 'yes'提示正在输入。typing=='no'取消提示
+
+
+
+## 3.19. revokeMessage
+
+撤回消息
```
-OpenIM.iMManager.messageManager.createSoundMessage(
- soundPath: '相对路径',
- duration: '语音时长',
-)
+OpenIM.iMManager.messageManager.revokeMessage(message: message)
```
-注:initSDK时传入了数据缓存路径,如路径:A,这时需要你将语音文件复制到A路径下后,如 A/sound/a.m4a路径,soundPath的值:“/sound/a.m4a”。
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| ------- | ------- | -------------- |
+| message | Message | 被撤回的消息体 |
+
+注:调用此方法会触发消息撤回回调,可以在回调里移除界面上的消息显示。也会触发新增消息回调,新增的消息类型为撤回消息类型,可以在界面显示一条xx撤回了一条消息
+
-#### 创建语音消息(全路径)
-返回Future
+## 3.20. markC2CMessageAsRead
+
+标记接收的消息为已读
```
-OpenIM.iMManager.messageManager.createSoundMessageFromFullPath(
- soundPath: path,
- duration: duration,
-)
+OpenIM.iMManager.messageManager.markC2CMessageAsRead( userID: userID, messageIDList: [msgId1,msgId2,..],)
```
-soundPath: 文件在设备上的的实际路径。此方法不需要拷贝,推荐使用。
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| ------------- | ------------- | ------------------------ |
+| userID | String | 单聊对象的用户id |
+| messageIDList | List< String> | 被标记为已读消息的消息id |
-#### 创建视频消息
+注:单聊使用此功能,调用此方法会触发对方的c2c消息已读回调,可以在回调里修改界面上的消息已读状态
-返回Future
+
+
+## 3.21. getHistoryMessageList
+
+获取聊天记录
```
-OpenIM.iMManager.messageManager
- .createVideoMessage(
- videoPath: path,
- videoType: type,
- duration: duration,
- snapshotPath: tPath)
+OpenIM.iMManager.messageManager .getHistoryMessageList( userID: '单聊对象id', groupID: '群聊群id', count: '获取的条数', startMsg:'从哪一个消息开始' )
```
-videoPath:相对路径。videoType:文件的mineType。duration: 视频时长。snapshotPath:视频的缩略图。
+- 参数说明:
-注:initSDK时传入了数据缓存路径,如路径:A,这时需要你将视频文件复制到A路径下后,如 A/video/a.mp4路径,videoPath的值:“/video/a.mp4”
+| 名称 | 类型 | 描述 |
+| -------- | ------- | ---------------- |
+| userID | String | 单聊对象的用户id |
+| groupID | String | 群聊id |
+| count | int | 拉取的条数 |
+| startMsg | Message | 从哪一个消息开始 |
-#### 创建视频消息(全路径)
+注:startMsg:如第一次拉取20条记录 startMsg=null && count=20 得到List< Message> list;下一次拉取消息记录参数:startMsg=list.first && count =20;以此内推,startMsg始终为list的第一条。
-返回Future
+
+
+## 3.22. addAdvancedMsgListener
+
+添加消息监听
```
-OpenIM.iMManager.messageManager.createVideoMessageFromFullPath(
- videoPath: videoPath,
- videoType: mimeType,
- duration: duration,
- snapshotPath: thumbnailPath,
-)
+// 创建监听var listener = OnAdvancedMsgListener( recvMessageRevoked: (msgId){ // 消息被撤回回调 var revokedMsg = Message(clientMsgID: msgId); messageList.remove(revokedMsg); }, recvC2CReadReceipt: (List list){ // 消息已读回执 messageList.forEach((e) { // 获取当前聊天窗口的已读回执 var info = list.firstWhere((element) => element.uid == uid); // 标记消息列表里对应的消息为已读状态 if (info.msgIDList?.contains(e.clientMsgID) == true) { e.isRead = true; } }); }, recvNewMessage: (msg){ // 如果是当前窗口的消息 if (isCurrentChat(message)) { // 正在输入消息 if (message.contentType == MessageType.typing) { // } else { // 新增消息 if (!messageList.contains(message)) { messageList.add(message); } } } },)// 添加监听OpenIM.iMManager.messageManager.addAdvancedMsgListener(listener);
```
-videoPath: 文件在设备上的的实际路径。此方法不需要拷贝,推荐使用。
+| 事件回调 | 事件描述 | 推荐操作 |
+| ------------------ | -------------- | ---------------- |
+| recvMessageRevoked | 消息成功撤回 | 从界面移除消息 |
+| recvC2CReadReceipt | 消息被阅读回执 | 将消息标记为已读 |
+| recvNewMessage | 收到新消息 | 界面添加新消息 |
+
+
-#### 创建文件消息
+## 3.23. removeAdvancedMsgListener
-返回Future
+移除消息监听
```
-OpenIM.iMManager.messageManager.createFileMessage(
- filePath: filePath,
- fileName: fileName,
-);
+OpenIM.iMManager.messageManager.removeAdvancedMsgListener(listener);
```
-filePath: 文件的相对路径,fileName:文件名
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| -------- | ------------------------- | -------------------------- |
+| listener | OnAdvancedMsgListener对象 | listener为3.22中创建的实例 |
-注:initSDK时传入了数据缓存路径,如路径:A,这时需要你将视频文件复制到A路径下后,如 A/file/a.txt路径,filePath的值:“/file/a.txt”
-#### 创建文件消息(全路径)
-返回Future
+## 3.24. setMsgSendProgressListener
+
+消息发送进度监听,主要用途:图片,视频,文件等上传进度监听。
```
-OpenIM.iMManager.messageManager.createFileMessageFromFullPath(
- filePath: filePath,
- fileName: fileName,
-)
+OpenIM.iMManager.messageManager.setMsgSendProgressListener(OnMsgSendProgressListener( progressCallback: (String msgId, int progress){ // 根据消息id(clientMsgID),判断图片等上传进度 },))
```
-filePath: 文件在设备上的的实际路径。此方法不需要拷贝,推荐使用。
-#### 创建位置消息
-返回Future
+## 3.25. deleteMessageFromLocalStorage
+
+删除本地消息。
```
-OpenIM.iMManager.messageManager.createLocationMessage(
- latitude: ’纬度‘,
- longitude: ’经度‘,
- description: ’描述信息,可以根据自己的需求传任何数据‘,
-)
+OpenIM.iMManager.messageManager.deleteMessageFromLocalStorage(message);
```
-description:在位置消息展示时,有位置名,位置描述,定位图片信息。推荐 description:{"title":"天府新谷","detail":"四川省高新区石羊街道府城大道西段399号","url":"https://apis.map.qq.com/ws/staticmap/v2/?center=%s&zoom=18&size=600*300&maptype=roadmap&markers=size:large|color:0xFFCCFF|label:k|%s&key=TMNBZ-3CGC6-C6SSL-EJA3B-E2P5Q-V7F6Q"}
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| ------- | ------- | ---------------- |
+| message | Message | 被删除的消息对象 |
-#### 创建引用消息
-返回Future
+
+## 3.26. insertSingleMessageToLocalStorage
+
+插入一条消息到本地。
```
-OpenIM.iMManager.messageManager.createQuoteMessage(
- text: '消息内容',
- quoteMsg: '被引用的消息对象Message',
-)
+OpenIM.iMManager.messageManager.insertSingleMessageToLocalStorage( userID: '接收者ID', message: '消息结构体', sender: '发送者ID')
```
-#### 创建名片消息
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| -------- | ------- | ---------- |
+| recevier | String | 接收者ID |
+| sender | String | 发送者ID |
+| message | Message | 消息结构体 |
+
-返回Future
+
+## 3.27. findMessages
+
+根据消息ID查找本地消息。
```
-OpenIM.iMManager.messageManager.createCardMessage(
- data: '用户信息Map',
-)
+OpenIM.iMManager.messageManager.findMessages(messageIDList: [id1,di2])
```
-data接收一个Map值:如{"uid": uid, 'name': name, 'icon': icon},按需求定义。
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| ------------- | ------------- | ------------------------- |
+| messageIDList | List< String> | 消息id(clientMsgID)集合 |
+
-#### 创建合并消息
-返回Future
+# 4. 会话
+
+
+
+## 4.1. getAllConversationList
+
+拉取当前所有的会话记录
```
-OpenIM.iMManager.messageManager.createMergerMessage(
- messageList: '被选中的消息',
- title: '标题',
- summaryList: '摘要',
-)
+List list = await OpenIM.iMManager.conversationManager.getAllConversationList()
```
-#### 创建转发消息
-返回Future
+
+## 4.2. getOneConversation
+
+根据用户ID或群聊ID和session类型获取单个会话。
```
-OpenIM.iMManager.messageManager.createForwardMessage(
- message: '被转发的Message',
-)
+ConversationInfo info = await OpenIM.iMManager.conversationManager.getSingleConversation( sourceID: sourceID, sessionType: sessionType,)
```
-#### 创建自定义消息
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| ----------- | ------ | ------------------------------------------------------------ |
+| sourceID | String | 如果是单聊其值为单聊对象的userId;如果是群聊其值为群的groupId |
+| sessionType | String | 如果是单聊sessionType=1;群聊sessionType=2 |
+
-返回Future
+
+## 4.3. getMultipleConversation
+
+根据会话ID获取多个会话。
```
-OpenIM.iMManager.messageManager.createCustomMessage(
- data: '自定义数据',
- extension: '自定义数据',
- description: '自定义数据',
- )
+List list = await OpenIM.iMManager.conversationManager.getMultipleConversation( conversationIDList: conversationIDList);
```
-#### 发送消息
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| ------------------ | ------------- | ------------ |
+| conversationIDList | List< String> | 会话的id集合 |
+
+
+
+## 4.4. deleteConversation
+
+删除会话,执行此操作会触发会话记录发生改变回调。
```
-OpenIM.iMManager.messageManager
- .sendMessage(
- message: message,
- userID: userId,
- groupID: groupId,
- )
- .then((value) => _sendSucceeded(message))
- .catchError((e) => _senFailed(message, e))
- .whenComplete(() => _completed())
+OpenIM.iMManager.conversationManager.deleteConversation( conversationID: conversationID,);
```
-message:创建的消息体。userID:用户id。groupID:组id。如果一对一聊天 userID不能为空。如果群聊天groupID不能为空。如果消息发送成功执行then方法,发送失败执行catchError方法。
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| -------------- | ------ | -------------- |
+| conversationID | String | 被删除的会话id |
-#### 提示用户正在输入
+
+
+## 4.5. setConversationDraft
+
+设置草稿,执行此操作会触发会话记录发生改变回调。
```
-OpenIM.iMManager.messageManager.typingStatusUpdate(
- userID: uid,
- typing: '',
-)
+OpenIM.iMManager.conversationManager.setConversationDraft( conversationID: conversationID, draftText: draftText,);
```
-单聊使用此功能。userID单聊对象id。typing:true正在输入,false停止输入。
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| -------------- | ------ | -------------------- |
+| draftText | String | 未完成发送的消息内容 |
+| conversationID | String | 会话id |
-注:在收到的新消息回调里如果消息类型为typing消息且typing == 'yes'提示正在输入。typing=='no'取消提示
-#### 撤回消息
+
+## 4.6. pinConversation
+
+置顶会话,执行此操作会触发会话记录发生改变回调。
```
-OpenIM.iMManager.messageManager.revokeMessage(message: message)
+OpenIM.iMManager.conversationManager.pinConversation( conversationID: conversationID, isPinned: true,);
```
-message:被撤回的消息体。
+- 参数说明:
-注:调用此方法会触发消息撤回回调,可以在回调里移除界面上的消息显示。也会触发新增消息回调,新增的消息类型为撤回消息类型,可以在界面显示一条xx撤回了一条消息
+| 名称 | 类型 | 描述 |
+| -------------- | ------ | --------------------------- |
+| isPinned | bool | true:置顶,false:取消置顶 |
+| conversationID | String | 会话id |
-#### 标记消息为已读
+注:ConversationInfo对象里的isPinned字段,isPinned==1代表置顶
+
+
+
+## 4.7. markSingleMessageHasRead
+
+标记单聊会话消息为已读。
```
-OpenIM.iMManager.messageManager.markC2CMessageAsRead(
- userID: userID,
- messageIDList: [msgId1,msgId2,..],
-)
+OpenIM.iMManager.conversationManager.markSingleMessageHasRead(userID: userID)
```
-单聊使用此功能。userID单聊对象id。messageIDList:被标记为已读消息的消息id。
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| ------ | ------ | ---------- |
+| userID | String | 单聊用户id |
+
+
-注:调用此方法会触发c2c消息已读回调,可以在回调里修改界面上的消息已读状态
+## 4.8. markGroupMessageHasRead
-#### 获取聊天记录
+标记群聊会话消息已读。
```
-OpenIM.iMManager.messageManager
- .getHistoryMessageList(
- userID: '单聊对象id',
- groupID: '群聊群id',
- count: '获取的条数',
- startMsg:'从哪一个消息开始'
- )
+OpenIM.iMManager.conversationManager.markGroupMessageHasRead(groupID: groupID)
```
-如果是单聊窗口userID不能为空,如果是群聊窗口groupID不能为空。startMsg:如第一次拉取20条记录startMsg=null&&count=20得到List list;下一次拉取消息记录参数:startMsg=list.first && count =20;以此内推,startMsg始终为list的第一条。
+- 参数说明:
-#### 设置消息监听
+| 名称 | 类型 | 描述 |
+| ------- | ------ | ------ |
+| groupID | String | 群组id |
+
+
+
+## 4.9. getTotalUnreadMsgCount
+
+获取消息总未读。
```
-OpenIM.iMManager.messageManager.addAdvancedMsgListener(OnAdvancedMsgListener(
- recvMessageRevoked: (msgId){
- // 消息被撤回回调
- var revokedMsg = Message(clientMsgID: msgId);
- messageList.remove(revokedMsg);
- },
- recvC2CReadReceipt: (List list){
- // 消息已读回执
- messageList.forEach((e) {
- // 获取当前聊天窗口的已读回执
- var info = list.firstWhere((element) => element.uid == uid);
- // 标记消息列表里对应的消息为已读状态
- if (info.msgIDList?.contains(e.clientMsgID) == true) {
- e.isRead = true;
- }
- });
- },
- recvNewMessage: (msg){
- // 如果是当前窗口的消息
- if (isCurrentChat(message)) {
- // 正在输入消息
- if (message.contentType == MessageType.typing) {
- //
- } else {
- // 新增消息
- if (!messageList.contains(message)) {
- messageList.add(message);
- }
- }
- }
- },
-))
+int count = await OpenIM.iMManager.conversationManager.getTotalUnreadMsgCount();
```
-| 事件回调 | 事件描述 | 推荐操作 |
-| ------------------ | -------------- | ---------------- |
-| recvMessageRevoked | 消息成功撤回 | 从界面移除消息 |
-| recvC2CReadReceipt | 消息被阅读回执 | 将消息标记为已读 |
-| recvNewMessage | 收到新消息 | 界面添加新消息 |
-#### 消息发送进度监听
-主要用途:图片,视频,文件等上传进度监听。
+## 4.10. setConversationListener
+
+设置会话监听器,会话记录发生改变时回调。
```
-OpenIM.iMManager.messageManager.setMsgSendProgressListener(OnMsgSendProgressListener(
- progressCallback: (String msgId, int progress){
- // 根据消息id,判断图片等上传进度
- },
-))
+OpenIM.iMManager.conversationManager.setConversationListener(OnConversationListener( conversationChanged: (list){ // 会话记录改变 }, newConversation: (list){ // 新增会话 }, totalUnreadMsgCountChanged: (count){ // 未读消息总数改变 }, syncServerFailed: () {}, syncServerFinish: () {}, syncServerStart: () {},));
```
-### 7,退出
+| 事件回调 | 事件描述 | 推荐操作 |
+| -------------------------- | -------------------- | -------------- |
+| conversationChanged | 会话记录发生改变 | 刷新会话列表 |
+| newConversation | 有新的会话被添加 | 刷新会话列表 |
+| totalUnreadMsgCountChanged | 未读消息总数发生改变 | 刷新消息未读数 |
+
-#### 反初始化
+
+# 5.好友关系
+
+## 5.1. getFriendList
+
+获取好友列表。
```
-OpenIM.iMManager.unInitSDK();
+List list = await OpenIM.iMManager.friendshipManager.getFriendList();
```
-#### 登出
+如果需要做联系人A-Z列表效果,推荐使用方法getFriendListMap, 该方法返回值为Future> ,然后再将list转换为你自己的List Object,如:
```
-OpenIM.iMManager.logout();
+OpenIM.iMManager.friendshipManager.getFriendListMap() .then((list) => list.map((e) => ContactsInfo.fromJson(e)).toList());
```
+
+
+## 5.2. getFriendsInfo
+
+获取好友信息。
+
+```
+List list = await OpenIM.iMManager.friendshipManager.getFriendsInfo(uidList: uidList)
+```
+
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| ------- | ------------- | ------------ |
+| uidList | List< String> | 用户的ID集合 |
+
+
+
+## 5.3. setFriendInfo
+
+设置好友备注信息。
+
+```
+OpenIM.iMManager.friendshipManager.setFriendInfo(uid: uid, comment: '备注')
+```
+
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| ------- | ------ | -------- |
+| uid | String | 用户的ID |
+| comment | String | 备注 |
+
+
+
+## 5.4. checkFriend
+
+检查与用户间是否有好友关系。
+
+```
+List list = await OpenIM.iMManager.friendshipManager.checkFriend([id1,id2, ...]);
+```
+
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| ------- | ------------- | ------------ |
+| uidList | List< String> | 用户的ID集合 |
+
+根据类UserInfo的flag字段判断。flag == 1:是好友关系,其他非好友关系。
+
+
+
+## 5.5. deleteFromFriendList
+
+从好友列表中删除用户。
+
+```
+OpenIM.iMManager.friendshipManager.deleteFromFriendList(uid: uid);
+```
+
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| ---- | ------ | -------- |
+| uid | String | 用户的ID |
+
+返回Future,执行then方法为删除成功,执行cathError方法为删除失败。
+
+
+
+## 5.6. addFriend
+
+发起添加好友申请。
+
+```
+OpenIM.iMManager.friendshipManager.addFriend(uid: uid, reason: reason);
+```
+
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| ------ | ------ | -------- |
+| uid | String | 用户的ID |
+| reason | String | 添加说明 |
+
+返回Future,执行then方法为添加成功,执行cathError方法为添加失败。
+
+
+
+## 5.7. getFriendApplicationList
+
+获取好友请求列表。
+
+```
+List list = await OpenIM.iMManager.friendshipManager.getFriendApplicationList();
+```
+
+类UserInfo的flag字段:flag == 0:等待处理;flag == 1:已添加;flag == -1:已拒绝。
+
+注:新朋友的红点数通过计算列表里flag == 0的item的数量。
+
+
+
+## 5.8. acceptFriendApplication
+
+接受好友请求。
+
+```
+OpenIM.iMManager.friendshipManager.acceptFriendApplication(uid: uid)
+```
+
+uid:为好友申请列表返回的数据里UserInfo类的uid字段。
+
+返回Future,执行then方法为操作成功,执行cathError方法为操作失败。
+
+
+
+## 5.9. refuseFriendApplication
+
+拒绝好友请求。
+
+```
+OpenIM.iMManager.friendshipManager.refuseFriendApplication(uid: uid)
+```
+
+返回Future,执行then方法为操作成功,执行cathError方法为操作失败。
+
+
+
+## 5.10. addToBlackList
+
+将用户添加到黑名单。
+
+```
+OpenIM.iMManager.friendshipManager.addToBlackList(uid: uid)
+```
+
+返回Future,执行then方法为操作成功,执行cathError方法为操作失败。
+
+
+
+## 5.11. deleteFromBlackList
+
+从黑名单移除用户。
+
+```
+OpenIM.iMManager.friendshipManager.deleteFromBlackList(uid: uid);
+```
+
+返回Future,执行then方法为操作成功,执行cathError方法为操作失败。
+
+
+
+## 5.12. getBlackList
+
+获取黑名单列表。
+
+```
+List list = await OpenIM.iMManager.friendshipManager.getBlackList();
+```
+
+注:如果好友被拉进黑名单,调用getFriendList 或 getFriendListMap方法得到好友包含了黑名单的人,需要通过UserInfo类的isInBlackList字段筛选,如果isInBlackList == 1说明被拉入黑名单。
+
+
+
+## 5.13. setFriendListener
+
+设置好友监听器。
+
+```
+OpenIM.iMManager.friendshipManager.setFriendshipListener(OnFriendshipListener( blackListAdd: (u){ // 好友被加入黑名时单回调 }, blackListDeleted: (u){ // 好友从黑名单移除时回调 }, friendApplicationListAccept: (u){ // 发起的好友请求被接受时回调 }, friendApplicationListAdded: (u){ // 我接受被人的发起的好友请求时回调 }, friendApplicationListDeleted: (u){ // 删除好友请求时回调 }, friendApplicationListReject: (u){ // 请求被拒绝回调 }, friendInfoChanged: (u){ // 好友资料发生变化时回调 }, friendListAdded: (u){ // 已添加好友回调 }, friendListDeleted: (u){ // 好友被删除时回调 },));
+```
+
+| 事件回调 | 事件描述 | 推荐操作 |
+| ---------------------------- | -------------------------- | ---------------------------------- |
+| blackListAdd | 好友被加入黑名 | 刷新好友列表或黑名单列表 |
+| blackListDeleted | 好友从黑名单移除 | 刷新好友列表或黑名单列表 |
+| friendApplicationListAccept | 发起的好友请求被接受 | 刷新好友请求列表 |
+| friendApplicationListAdded | 我接受被人的发起的好友请求 | 刷新好友请求列表 |
+| friendApplicationListDeleted | 删除好友请求 | 刷新好友请求列表 |
+| friendApplicationListReject | 请求被拒绝 | 刷新好友请求列表 |
+| friendInfoChanged | 好友资料发生变化 | 刷新好友列表,好友信息或黑名单列表 |
+| friendListAdded | 已成为好友 | 刷新好友列表 |
+| friendListDeleted | 好友被删除 | 刷新好友列表 |
+
+
+
+# 6. 群关系
+
+
+
+## 6.1. createGroup
+
+创建一个群聊,并指定群信息以及群成员。
+
+```
+OpenIM.iMManager.groupManager.createGroup( groupName: groupName, notification: notification, introduction: introduction, faceUrl: faceUrl, list: roles,)
+```
+
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| ------------ | ---------------------- | ------------------------------------------------------------ |
+| groupName | String | 群名 |
+| notification | String | 群公告 |
+| introduction | String | 群介绍 |
+| faceUrl | String | 群icon |
+| list | List< GroupMemberRole> | 在发起群聊时选择的群成员列表。
GroupMemberRole类字段说明:setRole:0:普通成员 2:管理员;uid:成员的uid。 |
+
+
+
+## 6.2. getGroupsInfo
+
+批量获取群组信息。
+
+```
+List list = await OpenIM.iMManager.groupManager.getGroupsInfo(gidList: [gid1,gid2,...]);
+```
+
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| ------- | ------------- | ---------- |
+| gidList | List< String> | 群组id集合 |
+
+
+
+## 6.3. setGroupInfo
+
+设置、更新群聊信息。
+
+```
+OpenIM.iMManager.groupManager.setGroupInfo( groupName: groupName, notification: notification, introduction: introduction, faceUrl: faceUrl, )
+```
+
+返回Future,执行then方法为操作成功,执行cathError方法为操作失败。
+
+
+
+## 6.4. getJoinedGroupList
+
+获取已加入的群列表。
+
+```
+List list = await OpenIM.iMManager.groupManager.getJoinedGroupList();
+```
+
+如果类GroupInfo的ownerId字段的值跟当前用户的uid一致,则当前用户就是群的发起者。否则是参与者。
+
+
+
+## 6.5. getGroupMemberList
+
+获取群成员列表。
+
+GroupMembersList类的nextSeq字段:下一页的开始index。data字段:群成员。
+
+```
+GroupMembersList value = await OpenIM.iMManager.groupManager.getGroupMemberList( groupId: gid, filter:0, next:0,)
+```
+
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| ------- | ------ | ------------------------------------------------------------ |
+| groupId | String | 群组id |
+| filter | int | 过滤成员,0不过滤,1群的创建者,2管理员;默认值0 |
+| next | int | 分页,从哪一条开始获取,默认值0。参照GroupMembersList的nextSeq字段的值。 |
+
+
+
+## 6.6. getGroupMembersInfo
+
+批量获取群成员信息。
+
+```
+List list = await OpenIM.iMManager.groupManager.getGroupMembersInfo( groupId: groupId, uidList: uidList)
+```
+
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| ------- | ------------- | ------------ |
+| groupId | String | 群组id |
+| uidList | List< String> | 群成员ID集合 |
+
+
+
+## 6.7. joinGroup
+
+申请加入群聊。
+
+```
+OpenIM.iMManager.groupManager.joinGroup(gid: gid, reason: null)
+```
+
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| ------ | ------ | ------------ |
+| gid | String | 群组id |
+| reason | String | 请求验证信息 |
+
+返回Future,执行then方法为操作成功,执行cathError方法为操作失败。
+
+
+
+## 6.8. getGroupApplicationList
+
+获取加入群聊申请列表。
+
+```
+GroupApplicationList list = await OpenIM.iMManager.groupManager.getGroupApplicationList()
+```
+
+- GroupApplicationList字段说明:
+
+| 名称 | 类型 | 描述 |
+| ----- | --------------------------- | -------- |
+| count | int | 未处理数 |
+| user | List< GroupApplicationInfo> | 申请列表 |
+
+
+
+## 6.9. acceptGroupApplication
+
+同意入群请求。
+
+```
+OpenIM.iMManager.groupManager.acceptGroupApplication(info: info, reason: reason)
+```
+
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| ------ | -------------------- | --------------------- |
+| info | GroupApplicationInfo | 取6.8里申请列表的item |
+| reason | String | 同意原因 |
+
+返回Future,执行then方法为操作成功,执行cathError方法为操作失败。
+
+
+
+## 6.10. refuseGroupApplication
+
+拒绝入群请求。
+
+```
+OpenIM.iMManager.groupManager.refuseGroupApplication(info: info, reason: reason)
+```
+
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| ------ | -------------------- | --------------------- |
+| info | GroupApplicationInfo | 取6.8里申请列表的item |
+| reason | String | 拒绝入群原因 |
+
+返回Future,执行then方法为操作成功,执行cathError方法为操作失败。
+
+
+
+## 6.11. inviteUserToGroup
+
+邀请用户加入群组(可批量)。
+
+```
+OpenIM.iMManager.groupManager.inviteUserToGroup( groupId: gid, uidList: uidList, reason: reason,);
+```
+
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| ------- | ------------- | ---------------- |
+| groupId | String | 群聊ID |
+| uidList | List< String> | 邀请用户的id集合 |
+| reason | String | 请求验证信息 |
+
+返回Future,执行then方法为操作成功,执行cathError方法为操作失败。
+
+
+
+## 6.12. kickGroupMember
+
+踢出群聊(可批量)。
+
+```
+OpenIM.iMManager.groupManager.kickGroupMember( groupId: gid, uidList: uidList, reason: reason,);
+```
+
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| ------- | ------------- | -------------- |
+| groupId | String | 群聊ID |
+| uidList | List< String> | 踢出用户ID集合 |
+| reason | String | 踢出原因 |
+
+返回Future,执行then方法为操作成功,执行cathError方法为操作失败。
+
+
+
+## 6.13. quitGroup
+
+退出群聊。
+
+```
+OpenIM.iMManager.groupManager.quitGroup(gid: gid)
+```
+
+返回Future,执行then方法为操作成功,执行cathError方法为操作失败。
+
+
+
+## 6.14. transferGroupOwner
+
+转让群主。
+
+```
+OpenIM.iMManager.groupManager.transferGroupOwner(gid: gid, uid: uid)
+```
+
+- 参数说明:
+
+| 名称 | 类型 | 描述 |
+| ---- | ------ | ------------- |
+| gid | String | 群id |
+| uid | String | 新的拥有者uid |
+
+注:此方法只有群的发起者(拥有者)才有权限访问,管理员和普通成员无权限访问。如果是发起者群资料展示可显示群权限转移按钮。
+
+
+
+## 6.15. setGroupListener
+
+设置群组监听器。
+
+```
+OpenIM.iMManager.groupManager.setGroupListener(OnGroupListener( applicationProcessed: (groupId, opUser, agreeOrReject, opReason){ // 群申请被处理时回调 }, groupCreated: (groupId){ // 群创建完成时回调 }, groupInfoChanged: (groupId, info){ // 群资料发生变化时回调 }, memberEnter: ( groupId, list){ // 有人进群时回调 }, memberInvited: ( groupId, opUser, list){ // 接受邀请时回调 }, memberKicked: ( groupId, opUser, list){ // 成员被踢出时回调 }, memberLeave: ( groupId, info){ // 群成员退群时回调 }, receiveJoinApplication: ( groupId, info, opReason){ // 收到入群申请 },))
+```
+
+| 事件回调 | 事件描述 | 推荐操作 |
+| ---------------------- | -------------- | -------------- |
+| applicationProcessed | 群申请被处理 | |
+| groupCreated | 群创建完成 | |
+| groupInfoChanged | 群资料发生变化 | 刷新群资料 |
+| memberEnter | 进群 | 刷新群成员列表 |
+| memberInvited | 接受邀请 | 刷新群成员列表 |
+| memberKicked | 成员被踢出 | 刷新群成员列表 |
+| memberLeave | 群成员退群 | 刷新群成员列表 |
+| receiveJoinApplication | 收到入群申请 | |
+
+###
+
+# 7. 数据对象结构
+
+## 7.1. 用户信息对象
+
+```
+class UserInfo { String uid; String? name; String? icon; int? gender; String? mobile; String? birth; String? email; String? ex; String? comment; int? isInBlackList; String? reqMessage; String? applyTime; int? flag; }
+```
+
+| Field | **Description** |
+| ------------- | ------------------------------------------------------------ |
+| uid | 用户id |
+| name | 用户名 |
+| icon | 用户头像 |
+| gender | 性别:1男,2女 |
+| mobile | 手机号 |
+| birth | 生日 |
+| email | 邮箱 |
+| ex | 扩展字段 |
+| comment | 备注 |
+| isInBlackList | 黑名单:1已拉入黑名单 |
+| reqMessage | 验证消息 |
+| applyTime | 申请时间 |
+| flag | 好友申请列表:0等待处理;1已同意;2已拒绝
好友关系:1已经是好友 |
+
+
+
+## 7.2. 消息对象
+
+```
+class Message { String? clientMsgID; String? serverMsgID; int? createTime; int? sendTime; String? sendID; String? recvID; int? msgFrom; /// [MessageType] int? contentType; int? platformID; List? forceList; String? senderNickName; String? senderFaceUrl; String? groupID; String? content; int? seq; bool? isRead; /// [MessageStatus] int? status; String? remark; dynamic ext; /// [ConversationType] int? sessionType; PictureElem? pictureElem; SoundElem? soundElem; VideoElem? videoElem; FileElem? fileElem; AtElem? atElem; LocationElem? locationElem; CustomElem? customElem; QuoteElem? quoteElem; MergeElem? mergeElem;}class PictureElem { String? sourcePath; PictureInfo? sourcePicture; PictureInfo? bigPicture; PictureInfo? snapshotPicture;}class PictureInfo { String? uuID; String? type; int? size; int? width; int? height; String? url;}class SoundElem { String? uuID; String? soundPath; String? sourceUrl; int? dataSize; int? duration;}class VideoElem { String? videoPath; String? videoUUID; String? videoUrl; String? videoType; int? videoSize; int? duration; String? snapshotPath; String? snapshotUUID; int? snapshotSize; String? snapshotUrl; int? snapshotWidth; int? snapshotHeight;}class FileElem { String? filePath; String? uuID; String? sourceUrl; String? fileName; int? fileSize;}class AtElem { String? text; List? atUserList; bool? isAtSelf;}class LocationElem { String? description; double? longitude; double? latitude;}class CustomElem { Uint8List? data; Uint8List? extension; String? description;}class QuoteElem { String? text; Message? quoteMessage;}class MergeElem { String? title; List? abstractList; List? multiMessage;}
+```
+
+
+
+### 7.2.1. Message
+
+| Field | Description |
+| -------------- | ------------------------------------------------------------ |
+| clientMsgID | 消息唯一ID |
+| serverMsgID | 消息服务器ID,暂时不使用 |
+| createTime | 消息创建时间,单位纳秒 |
+| sendTime | 消息发送时间,单位纳秒 |
+| sendID | 发送者ID |
+| recvID | 接收者ID |
+| msgFrom | 标识消息是用户级别还是系统级别 100:用户 200:系统 |
+| contentType | 消息类型:
101:文本消息
102:图片消息
103:语音消息
104:视频消息
105:文件消息
106:@消息
107:合并消息
108:转发消息
109:位置消息
110:自定义消息
111:撤回消息回执
112:C2C已读回执
113:正在输入状态 |
+| platformID | 平台类型 1:ios 2:android 3:windows 4:osx 5:web 6:mini 7:linux |
+| forceList | 强制推送列表(被@的用户) |
+| senderNickName | 发送者昵称 |
+| senderFaceUrl | 发送者头像 |
+| groupID | 群聊ID |
+| content | 消息内容 |
+| seq | 消息唯一序列号 |
+| isRead | 是否已读 |
+| status | 消息状态 1:发送中 2:发送成功 3:发送失败 4:已删除 5:已撤回 |
+| remark | 消息备注 |
+| sessionType | 会话类型 1:单聊 2:群聊 |
+| pictureElem | 图片信息 |
+| soundElem | 语音信息 |
+| videoElem | 视频信息 |
+| fileElem | 文件信息 |
+| atElem | @信息 |
+| locationElem | 位置信息 |
+| customElem | 自定义信息 |
+| quoteElem | 引用消息 |
+| mergeElem | 合并信息 |
+
+
+
+### 7.2.2. PictureElem
+
+| Field | Description |
+| --------------- | ------------ |
+| sourcePath | 本地资源地址 |
+| sourcePicture | 本地图片详情 |
+| bigPicture | 大图详情 |
+| snapshotPicture | 缩略图详情 |
+
+
+
+### 7.2.3. PictureInfo
+
+| Field | Description |
+| ------ | ----------- |
+| uuid | 唯一ID |
+| type | 图片类型 |
+| size | 图片大小 |
+| width | 图片宽度 |
+| height | 图片高度 |
+| url | 图片oss地址 |
+
+
+
+### 7.2.4. SoundElem
+
+| Field | Description |
+| --------- | ------------ |
+| uuid | 唯一ID |
+| soundPath | 本地资源地址 |
+| sourceUrl | oss地址 |
+| dataSize | 音频大小 |
+| duration | 音频时长 |
+
+
+
+### 7.2.5. VideoElem
+
+| Field | Description |
+| -------------- | ---------------- |
+| videoPath | 视频本地资源地址 |
+| videoUUID | 视频唯一ID |
+| videoUrl | 视频oss地址 |
+| videoType | 视频类型 |
+| videoSize | 视频大小 |
+| duration | 视频时长 |
+| snapshotPath | 视频快照本地地址 |
+| snapshotUUID | 视频快照唯一ID |
+| snapshotSize | 视频快照大小 |
+| snapshotUrl | 视频快照oss地址 |
+| snapshotWidth | 视频快照宽度 |
+| snapshotHeight | 视频快照高度 |
+
+
+
+### 7.2.6. FileElem
+
+| Field | Description |
+| --------- | ---------------- |
+| filePath | 文件本地资源地址 |
+| uuid | 唯一ID |
+| sourceUrl | oss地址 |
+| fileName | 文件名称 |
+| fileSize | 文件大小 |
+
+
+
+### 7.2.7. MergeElem
+
+| Field | Description |
+| ------------ | ------------ |
+| title | 合并消息标题 |
+| abstractList | 摘要列表 |
+| multiMessage | 合并消息列表 |
+
+
+
+### 7.2.8. AtElem
+
+| Field | Description |
+| ---------- | ----------- |
+| text | 文本消息 |
+| atUserList | @用户ID列表 |
+| isAtSelf | 是否@自己 |
+
+
+
+### 7.2.9. LocationElem
+
+| Field | Description |
+| ----------- | ----------- |
+| description | 描述 |
+| longitude | 经度 |
+| latitude | 纬度 |
+
+
+
+### 7.2.10. CustomElem
+
+| Field | Description |
+| ----------- | ---------------------- |
+| data | 自定义消息字节数据 |
+| extension | 自定义消息扩展字节数据 |
+| description | 描述 |
+
+
+
+### 7.2.11. QuoteElem
+
+| Field | Description |
+| ------------ | ----------- |
+| quoteMessage | 引用消息 |
+
+
+
+## 7.3. 会话对象
+
+```
+class ConversationInfo { String conversationID; /// [ConversationType] int? conversationType; String? userID; String? groupID; String? showName; String? faceUrl; int? recvMsgOpt; int? unreadCount; Message? latestMsg; int? latestMsgSendTime; String? draftText; int? draftTimestamp; /// pinned value is 1 dynamic isPinned; }
+```
+
+| Field | Description |
+| ----------------- | ------------------------------------------------------------ |
+| conversationID | 会话ID |
+| conversationType | 会话类型 1:单聊 2:群聊 |
+| userID | 会话对象用户ID |
+| groupID | 会话群聊ID |
+| showName | 会话对象(用户或群聊)名称 |
+| faceUrl | 用户头像或群聊头像 |
+| recvMsgOpt | 接收消息选项:
1:在线正常接收消息,离线时进行推送
2:不会接收到消息
3:在线正常接收消息,离线不会有推送 |
+| unreadCount | 未读消息数量 |
+| latestMsg | 最后一条消息 [消息对象](http://1.14.194.38:13123/client_doc/uni_doc.html)json字符串 |
+| latestMsgSendTime | 最后一条消息发送时间(ns) |
+| draftText | 会话草稿 |
+| draftTimestamp | 会话草稿设置时间 |
+| isPinned | 是否置顶,1置顶 |
+
+
+
+## 7.4. 已读消息回执
+
+```
+class HaveReadInfo { String? uid; List? msgIDList; int? readTime; int? msgFrom; int? contentType; int? sessionType; }
+```
+
+| Field | Description |
+| ----------- | ------------------------------------------------------------ |
+| uid | 单聊对象的ID |
+| contentType | 消息类型: 101:文本消息 102:图片消息 103:语音消息 104:视频消息 105:文件消息 106:@消息 107:合并消息 108:转发消息 109:位置消息 110:自定义消息 111:撤回消息回执 112:C2C已读回执 113:正在输入状态 |
+| msgFrom | 标识消息是用户级别还是系统级别 100:用户 200:系统 |
+| msgIDList | 已读消息clientMsgID集合 |
+| readTime | 已读时间 |
+| sessionType | 会话类型 1:单聊 2:群聊 |
+
+
+
+## 7.5. 群组信息对象
+
+```
+class GroupInfo { String groupID; String? groupName; String? notification; String? introduction; String? faceUrl; String? ownerId; int? createTime; int? memberCount; }
+```
+
+| Field | Description |
+| ------------ | ------------ |
+| groupID | 群组ID |
+| groupName | 群组名称 |
+| notification | 群公告 |
+| introduction | 群介绍 |
+| faceUrl | 群头像 |
+| ownerId | 群主ID |
+| createTime | 群组创建时间 |
+| memberCount | 群成员总数 |
+
+
+
+## 7.6. 群组成员信息
+
+```
+class GroupMembersInfo { String? groupID; String? userId; int? role; int? joinTime; String? nickName; String? faceUrl; dynamic ext; }
+```
+
+| Field | Description |
+| -------- | ------------------------------------------ |
+| groupID | 群id |
+| userId | 用户id |
+| role | 用户的角色,0:普通成员 1:发起者 2:管理员 |
+| joinTime | 加入时间 |
+| nickName | 群昵称 |
+| faceUrl | 头像 |
+| ext | 扩展字段 |
+
+
+
+## 7.7. 群申请信息
+
+```
+class GroupApplicationInfo { String? id; String? groupID; String? fromUserID; String? toUserID; int? flag; //INIT = 0, REFUSE = -1, AGREE = 1 String? reqMsg; String? handledMsg; int? createTime; String? fromUserNickName; String? toUserNickName; String? fromUserFaceURL; String? toUserFaceURL; String? handledUser; int? type; //APPLICATION = 0, INVITE = 1 int? handleStatus; //UNHANDLED = 0, BY_OTHER = 1, BY_SELF = 2 int? handleResult; //REFUSE = 0, AGREE = 1 }
+```
+
+| Field | Description |
+| ---------------- | ----------------------------------------- |
+| groupID | 群组ID |
+| fromUserID | 申请用户的ID |
+| toUserID | 接收用户的ID |
+| flag | 0:未处理,1:拒绝,2:同意 |
+| reqMsg | 入群原因 |
+| handledMsg | 处理反馈 |
+| createTime | 申请事件 |
+| fromUserNickName | 申请用户的昵称 |
+| toUserNickName | 接收用户的昵称 |
+| fromUserFaceURL | 申请用户的头像 |
+| toUserFaceURL | 接收用户的头像 |
+| handledUser | 处理人 |
+| type | 0:申请进群, 1:邀请进群 |
+| handleStatus | 0:未处理, 1:被其他人处理, 2:被自己处理 |
+| handleResult | 0:拒绝,1:同意 |
+
diff --git a/lib/src/manager/im_conversation_manager.dart b/lib/src/manager/im_conversation_manager.dart
index 08ac7c9..6b96728 100644
--- a/lib/src/manager/im_conversation_manager.dart
+++ b/lib/src/manager/im_conversation_manager.dart
@@ -96,6 +96,24 @@ class ConversationManager {
}))
.then((value) => _printValue(value));
+ ///
+ /// @params userID: receiver's userID
+ Future markSingleMessageHasRead({required String userID}) {
+ return _channel.invokeMethod(
+ 'markSingleMessageHasRead', _buildParam({'userID': userID}));
+ }
+
+ ///
+ Future markGroupMessageHasRead({required String groupID}) {
+ return _channel.invokeMethod(
+ 'markGroupMessageHasRead', _buildParam({'groupID': groupID}));
+ }
+
+ ///
+ Future getTotalUnreadMsgCount() {
+ return _channel.invokeMethod('getTotalUnreadMsgCount', _buildParam({}));
+ }
+
static Map _buildParam(Map param) {
param["ManagerName"] = "conversationManager";
return param;
diff --git a/lib/src/manager/im_friendship_manager.dart b/lib/src/manager/im_friendship_manager.dart
index 54deaf3..e1d746c 100644
--- a/lib/src/manager/im_friendship_manager.dart
+++ b/lib/src/manager/im_friendship_manager.dart
@@ -55,8 +55,14 @@ class FriendshipManager {
/// modify friend information, only [comment] can be modified
///
- Future setFriendInfo({required UserInfo info}) {
- return _channel.invokeMethod('setFriendInfo', _buildParam(info.toJson()));
+ Future setFriendInfo(
+ {required String uid, required String comment}) {
+ return _channel.invokeMethod(
+ 'setFriendInfo',
+ _buildParam({
+ 'uid': uid,
+ 'comment': comment,
+ }));
}
/// add to blacklist
diff --git a/lib/src/manager/im_group_manager.dart b/lib/src/manager/im_group_manager.dart
index 48ff34b..5a45d5f 100644
--- a/lib/src/manager/im_group_manager.dart
+++ b/lib/src/manager/im_group_manager.dart
@@ -130,16 +130,23 @@ class GroupManager {
}
/// create a group
- /// @params groupInfo: Group information
/// @params list[List]: Group members you invited
Future createGroup({
- GroupInfo? groupInfo,
+ String? groupName,
+ String? notification,
+ String? introduction,
+ String? faceUrl,
required List list,
}) {
return _channel.invokeMethod(
'createGroup',
_buildParam({
- 'gInfo': groupInfo?.toJson(),
+ 'gInfo': {
+ "groupName": groupName,
+ "notification": notification,
+ "introduction": introduction,
+ "faceUrl": faceUrl,
+ },
'memberList': list.map((e) => e.toJson()).toList()
}));
/*.then((value) => _formatJson(value)['groupID'])*/
@@ -147,12 +154,20 @@ class GroupManager {
/// Edit group information
Future setGroupInfo({
- required GroupInfo groupInfo,
+ String? groupName,
+ String? notification,
+ String? introduction,
+ String? faceUrl,
}) {
return _channel.invokeMethod(
'setGroupInfo',
_buildParam({
- 'gInfo': groupInfo.toJson(),
+ 'gInfo': {
+ "groupName": groupName,
+ "notification": notification,
+ "introduction": introduction,
+ "faceUrl": faceUrl,
+ },
}));
}
diff --git a/lib/src/manager/im_message_manager.dart b/lib/src/manager/im_message_manager.dart
index 3305f7c..2a1cc79 100644
--- a/lib/src/manager/im_message_manager.dart
+++ b/lib/src/manager/im_message_manager.dart
@@ -98,14 +98,14 @@ class MessageManager {
/// @params userID: receiver's user ID
/// @params sender: current user ID
Future insertSingleMessageToLocalStorage({
- String? userID,
- Message? message,
+ String? receiver,
String? sender,
+ Message? message,
}) {
return _channel.invokeMethod(
'insertSingleMessageToLocalStorage',
_buildParam({
- "userID": userID,
+ "userID": receiver,
"message": message?.toJson(),
"sender": sender,
}));
@@ -120,19 +120,6 @@ class MessageManager {
}));
}
- ///
- /// @params userID: receiver's userID
- Future markSingleMessageHasRead({required String userID}) {
- return _channel.invokeMethod(
- 'markSingleMessageHasRead', _buildParam({'userID': userID}));
- }
-
- ///
- Future markGroupMessageHasRead({required String groupID}) {
- return _channel.invokeMethod(
- 'markGroupMessageHasRead', _buildParam({'groupID': groupID}));
- }
-
///
/// @params userID: receiver's user ID
Future markC2CMessageAsRead({
@@ -373,11 +360,6 @@ class MessageManager {
.then((value) => _toObj(value));
}
- ///
- Future getTotalUnreadMsgCount() {
- return _channel.invokeMethod('getTotalUnreadMsgCount', _buildParam({}));
- }
-
///
void forceSyncMsg() {
_channel.invokeMethod('forceSyncMsg', _buildParam({}));
diff --git a/test/flutter_openim_sdk_test.dart b/test/flutter_openim_sdk_test.dart
index c54cd7e..eeaba27 100644
--- a/test/flutter_openim_sdk_test.dart
+++ b/test/flutter_openim_sdk_test.dart
@@ -1,6 +1,7 @@
-import 'dart:convert';
+
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
+import 'package:flutter_openim_sdk/src/openim.dart';
void main() {
/* const MethodChannel channel = MethodChannel('flutter_openim_sdk');
@@ -41,4 +42,7 @@ void main() {
// print('${now.millisecond}');
// print('${now.microsecondsSinceEpoch}');
// print('${now.millisecondsSinceEpoch}');
+
+
+
}