add group fuc
This commit is contained in:
@@ -1,8 +1,13 @@
|
||||
library flutter_openim_sdk;
|
||||
|
||||
export 'src/enum/conversation_type.dart';
|
||||
export 'src/enum/group_role.dart';
|
||||
export 'src/enum/listener_type.dart';
|
||||
export 'src/enum/message_type.dart';
|
||||
export 'src/listener/advanced_msg_listener.dart';
|
||||
export 'src/listener/conversation_listener.dart';
|
||||
export 'src/listener/friendship_listener.dart';
|
||||
export 'src/listener/group_listener.dart';
|
||||
export 'src/listener/init_sdk_listener.dart';
|
||||
export 'src/listener/msg_send_progress_listener.dart';
|
||||
export 'src/manager/im_conversation_manager.dart';
|
||||
@@ -13,6 +18,7 @@ export 'src/manager/im_message_manager.dart';
|
||||
export 'src/manager/im_offline_push_manager.dart';
|
||||
export 'src/manager/im_signaling_manager.dart';
|
||||
export 'src/models/conversation_info.dart';
|
||||
export 'src/models/group_info.dart';
|
||||
export 'src/models/message.dart';
|
||||
export 'src/models/user_info.dart';
|
||||
export 'src/openim.dart';
|
||||
|
||||
4
lib/src/enum/conversation_type.dart
Normal file
4
lib/src/enum/conversation_type.dart
Normal file
@@ -0,0 +1,4 @@
|
||||
class ConversationType{
|
||||
static const int single_chat = 1;
|
||||
static const int group_chat = 2;
|
||||
}
|
||||
5
lib/src/enum/group_role.dart
Normal file
5
lib/src/enum/group_role.dart
Normal file
@@ -0,0 +1,5 @@
|
||||
class GroupRole {
|
||||
static const member = 0;
|
||||
static const owner = 1;
|
||||
static const admin = 2;
|
||||
}
|
||||
@@ -15,4 +15,6 @@ class MessageType {
|
||||
static const file = 105;
|
||||
|
||||
static const accept_friend = 201;
|
||||
|
||||
static const create_group = 502;
|
||||
}
|
||||
|
||||
36
lib/src/listener/group_listener.dart
Normal file
36
lib/src/listener/group_listener.dart
Normal file
@@ -0,0 +1,36 @@
|
||||
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
|
||||
|
||||
class GroupListener {
|
||||
void onMemberEnter(String groupId, List<GroupMembersInfo> list) {}
|
||||
|
||||
void onMemberLeave(String groupId, GroupMembersInfo info) {}
|
||||
|
||||
void onMemberInvited(
|
||||
String groupId,
|
||||
GroupMembersInfo opUser,
|
||||
List<GroupMembersInfo> list,
|
||||
) {}
|
||||
|
||||
void onMemberKicked(
|
||||
String groupId,
|
||||
GroupMembersInfo opUser,
|
||||
List<GroupMembersInfo> list,
|
||||
) {}
|
||||
|
||||
void onGroupCreated(String groupId) {}
|
||||
|
||||
void onGroupInfoChanged(String groupId, GroupInfo info) {}
|
||||
|
||||
void onReceiveJoinApplication(
|
||||
String groupId,
|
||||
GroupMembersInfo info,
|
||||
String opReason,
|
||||
) {}
|
||||
|
||||
void onApplicationProcessed(
|
||||
String groupId,
|
||||
GroupMembersInfo opUser,
|
||||
int agreeOrReject,
|
||||
String opReason,
|
||||
) {}
|
||||
}
|
||||
@@ -20,8 +20,8 @@ class ConversationManager {
|
||||
.then((value) => _toList(value));
|
||||
}
|
||||
|
||||
/// sourceID 若为单聊则为userID,若为群聊则为groupID
|
||||
/// sessionType 若为单聊则为1,若为群聊则为2
|
||||
/// sourceID: userID(single chat) ,groupID(group chat)
|
||||
/// sessionType: 1(single chat) ,2(group chat)
|
||||
Future<ConversationInfo> getSingleConversation(
|
||||
{required String sourceID, required String sessionType}) {
|
||||
return _channel
|
||||
|
||||
@@ -1,13 +1,20 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_openim_sdk/src/listener/group_listener.dart';
|
||||
import 'package:flutter_openim_sdk/src/models/group_info.dart';
|
||||
|
||||
class GroupManager {
|
||||
MethodChannel _channel;
|
||||
late GroupListener groupListener;
|
||||
|
||||
GroupManager(this._channel);
|
||||
|
||||
void setGroupListener(GroupListener listener) {
|
||||
this.groupListener = listener;
|
||||
_channel.invokeMethod('setGroupListener', _buildParam({}));
|
||||
}
|
||||
|
||||
Future<List<GroupInviteResult>> inviteUserToGroup({
|
||||
required String groupId,
|
||||
required List<String> uidList,
|
||||
@@ -21,7 +28,7 @@ class GroupManager {
|
||||
'reason': reason,
|
||||
'uidList': uidList,
|
||||
}))
|
||||
.then((value) => _formatJson(value)
|
||||
.then((value) => (_formatJson(value) as List)
|
||||
.map((e) => GroupInviteResult.fromJson(e))
|
||||
.toList());
|
||||
}
|
||||
@@ -55,7 +62,7 @@ class GroupManager {
|
||||
'gid': groupId,
|
||||
'uidList': uidList,
|
||||
}))
|
||||
.then((value) => _formatJson(value)
|
||||
.then((value) => (_formatJson(value) as List)
|
||||
.map((e) => GroupMembersInfo.fromJson(e))
|
||||
.toList());
|
||||
}
|
||||
@@ -80,22 +87,27 @@ class GroupManager {
|
||||
|
||||
Future<List<GroupInfo>> getJoinedGroupList() {
|
||||
return _channel.invokeMethod('getJoinedGroupList', _buildParam({})).then(
|
||||
(value) =>
|
||||
_formatJson(value).map((e) => GroupInfo.fromJson(e)).toList());
|
||||
(value) => (_formatJson(value) as List)
|
||||
.map((e) => GroupInfo.fromJson(e))
|
||||
.toList());
|
||||
}
|
||||
|
||||
Future<String> createGroup({
|
||||
required GroupInfo groupInfo,
|
||||
Future<bool> isJoinedGroup({required String gid}) {
|
||||
return getJoinedGroupList()
|
||||
.then((list) => list.where((e) => e.groupID == gid).length > 0);
|
||||
}
|
||||
|
||||
Future<dynamic> createGroup({
|
||||
GroupInfo? groupInfo,
|
||||
required List<GroupMemberRole> list,
|
||||
}) {
|
||||
return _channel
|
||||
.invokeMethod(
|
||||
'createGroup',
|
||||
_buildParam({
|
||||
'gInfo': groupInfo.toJson(),
|
||||
'memberList': list.map((e) => e.toJson()).toList()
|
||||
}))
|
||||
.then((value) => _formatJson(value)['groupID']);
|
||||
return _channel.invokeMethod(
|
||||
'createGroup',
|
||||
_buildParam({
|
||||
'gInfo': groupInfo?.toJson(),
|
||||
'memberList': list.map((e) => e.toJson()).toList()
|
||||
}));
|
||||
/*.then((value) => _formatJson(value)['groupID'])*/
|
||||
}
|
||||
|
||||
Future<dynamic> setGroupInfo({
|
||||
@@ -113,13 +125,15 @@ class GroupManager {
|
||||
}) {
|
||||
return _channel
|
||||
.invokeMethod('getGroupsInfo', _buildParam({'gidList': gidList}))
|
||||
.then((value) =>
|
||||
_formatJson(value).map((e) => GroupInfo.fromJson(e)).toList());
|
||||
.then((value) {
|
||||
List list = _formatJson(value) ?? [];
|
||||
return list.map((e) => GroupInfo.fromJson(e)).toList();
|
||||
});
|
||||
}
|
||||
|
||||
Future<dynamic> joinGroup({
|
||||
required String gid,
|
||||
required String reason,
|
||||
String? reason,
|
||||
}) {
|
||||
return _channel.invokeMethod(
|
||||
'joinGroup',
|
||||
|
||||
@@ -12,6 +12,7 @@ class IMManager {
|
||||
late OfflinePushManager offlinePushManager;
|
||||
late SignalingManager signalingManager;
|
||||
late InitSDKListener _initSDKListener;
|
||||
late String logUid;
|
||||
|
||||
IMManager(this._channel) {
|
||||
conversationManager = ConversationManager(_channel);
|
||||
@@ -55,71 +56,83 @@ class IMManager {
|
||||
} else if (call.method == ListenerType.groupListener) {
|
||||
var args = call.arguments;
|
||||
String type = args['type'];
|
||||
Map<String, dynamic> params = args['data'] == null
|
||||
? new Map<String, dynamic>()
|
||||
: new Map<String, dynamic>.from(args['data']);
|
||||
|
||||
String groupID = params['groupID'] == null ? '' : params['groupID'];
|
||||
String opReason =
|
||||
params['opReason'] == null ? '' : params['opReason'];
|
||||
bool isAgreeJoin =
|
||||
params['isAgreeJoin'] == null ? false : params['isAgreeJoin'];
|
||||
String customData =
|
||||
params['customData'] == null ? '' : params['customData'];
|
||||
|
||||
Map<String, String> groupAttributeMap =
|
||||
params['groupAttributeMap'] == null
|
||||
? new Map<String, String>()
|
||||
: new Map<String, String>.from(params['groupAttributeMap']);
|
||||
|
||||
List<Map<String, dynamic>> memberListMap =
|
||||
params['memberList'] == null
|
||||
? List.empty(growable: true)
|
||||
: List.from(params['memberList']);
|
||||
|
||||
List<Map<String, dynamic>> groupMemberChangeInfoListMap =
|
||||
params['groupMemberChangeInfoList'] == null
|
||||
? List.empty(growable: true)
|
||||
: List.from(params['groupMemberChangeInfoList']);
|
||||
|
||||
List<Map<String, dynamic>> groupChangeInfoListMap =
|
||||
params['groupChangeInfoList'] == null
|
||||
? List.empty(growable: true)
|
||||
: List.from(params['groupChangeInfoList']);
|
||||
|
||||
Map<dynamic, dynamic> map = args['data'];
|
||||
switch (type) {
|
||||
case 'onMemberEnter':
|
||||
groupManager.groupListener.onMemberEnter(
|
||||
map['groupId'],
|
||||
(_formatJson(map['memberList']) as List)
|
||||
.map((e) => GroupMembersInfo.fromJson(e))
|
||||
.toList(),
|
||||
);
|
||||
break;
|
||||
case 'onMemberLeave':
|
||||
groupManager.groupListener.onMemberLeave(
|
||||
map['groupId'],
|
||||
GroupMembersInfo.fromJson(_formatJson(map['member'])),
|
||||
);
|
||||
break;
|
||||
case 'onMemberInvited':
|
||||
groupManager.groupListener.onMemberInvited(
|
||||
map['groupId'],
|
||||
GroupMembersInfo.fromJson(_formatJson(map['opUser'])),
|
||||
(_formatJson(map['memberList']) as List)
|
||||
.map((e) => GroupMembersInfo.fromJson(e))
|
||||
.toList(),
|
||||
);
|
||||
break;
|
||||
case 'onMemberKicked':
|
||||
break;
|
||||
case 'onMemberInfoChanged':
|
||||
groupManager.groupListener.onMemberKicked(
|
||||
map['groupId'],
|
||||
GroupMembersInfo.fromJson(_formatJson(map['opUser'])),
|
||||
(_formatJson(map['memberList']) as List)
|
||||
.map((e) => GroupMembersInfo.fromJson(e))
|
||||
.toList(),
|
||||
);
|
||||
break;
|
||||
case 'onGroupCreated':
|
||||
break;
|
||||
case 'onGroupDismissed':
|
||||
break;
|
||||
case 'onGroupRecycled':
|
||||
groupManager.groupListener.onGroupCreated(
|
||||
map['groupId'],
|
||||
);
|
||||
break;
|
||||
case 'onGroupInfoChanged':
|
||||
groupManager.groupListener.onGroupInfoChanged(
|
||||
map['groupId'],
|
||||
GroupInfo.fromJson(_formatJson(map['groupInfo'])),
|
||||
);
|
||||
break;
|
||||
case 'onReceiveJoinApplication':
|
||||
groupManager.groupListener.onReceiveJoinApplication(
|
||||
map['groupId'],
|
||||
GroupMembersInfo.fromJson(_formatJson(map['opUser'])),
|
||||
map['opReason'],
|
||||
);
|
||||
break;
|
||||
case 'onApplicationProcessed':
|
||||
groupManager.groupListener.onApplicationProcessed(
|
||||
map['groupId'],
|
||||
GroupMembersInfo.fromJson(_formatJson(map['opUser'])),
|
||||
map['agreeOrReject'],
|
||||
map['opReason'],
|
||||
);
|
||||
break;
|
||||
case 'onGrantAdministrator':
|
||||
break;
|
||||
case 'onRevokeAdministrator':
|
||||
break;
|
||||
case 'onQuitFromGroup':
|
||||
break;
|
||||
case 'onReceiveRESTCustomData':
|
||||
break;
|
||||
case 'onGroupAttributeChanged':
|
||||
break;
|
||||
// case 'onMemberInfoChanged':
|
||||
// break;
|
||||
// case 'onGroupDismissed':
|
||||
// break;
|
||||
// case 'onGroupRecycled':
|
||||
// break;
|
||||
//
|
||||
// case 'onGrantAdministrator':
|
||||
// break;
|
||||
// case 'onRevokeAdministrator':
|
||||
// break;
|
||||
// case 'onQuitFromGroup':
|
||||
// break;
|
||||
// case 'onReceiveRESTCustomData':
|
||||
// break;
|
||||
// case 'onGroupAttributeChanged':
|
||||
// break;
|
||||
}
|
||||
} else if (call.method == ListenerType.advancedMsgListener) {
|
||||
var type = call.arguments['type'];
|
||||
@@ -266,6 +279,7 @@ class IMManager {
|
||||
}
|
||||
|
||||
Future<dynamic> login({required String uid, required String token}) {
|
||||
this.logUid = uid;
|
||||
return _channel.invokeMethod(
|
||||
'login',
|
||||
_buildParam({'uid': uid, 'token': token}),
|
||||
|
||||
@@ -103,6 +103,11 @@ class MessageManager {
|
||||
'markSingleMessageHasRead', _buildParam({'userID': userID}));
|
||||
}
|
||||
|
||||
Future<dynamic> markGroupMessageHasRead({required String groupID}) {
|
||||
return _channel.invokeMethod(
|
||||
'markGroupMessageHasRead', _buildParam({'groupID': groupID}));
|
||||
}
|
||||
|
||||
Future<Message> createTextMessage({required String text}) {
|
||||
return _channel
|
||||
.invokeMethod('createTextMessage', _buildParam({'text': text}))
|
||||
|
||||
@@ -74,4 +74,8 @@ class ConversationInfo {
|
||||
data['isPinned'] = this.isPinned;
|
||||
return data;
|
||||
}
|
||||
|
||||
bool get isSingleChat => conversationType == ConversationType.single_chat;
|
||||
|
||||
bool get isGroupChat => conversationType == ConversationType.group_chat;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
class GroupInfo {
|
||||
String? groupID;
|
||||
String groupID;
|
||||
String? groupName;
|
||||
String? notification;
|
||||
String? introduction;
|
||||
@@ -9,7 +9,7 @@ class GroupInfo {
|
||||
int? memberCount;
|
||||
|
||||
GroupInfo(
|
||||
{this.groupID,
|
||||
{required this.groupID,
|
||||
this.groupName,
|
||||
this.notification,
|
||||
this.introduction,
|
||||
@@ -18,8 +18,8 @@ class GroupInfo {
|
||||
this.createTime,
|
||||
this.memberCount});
|
||||
|
||||
GroupInfo.fromJson(Map<String, dynamic> json) {
|
||||
groupID = json['groupID'];
|
||||
GroupInfo.fromJson(Map<String, dynamic> json): groupID = json['groupID'] {
|
||||
/*groupID = json['groupID'];*/
|
||||
groupName = json['groupName'];
|
||||
notification = json['notification'];
|
||||
introduction = json['introduction'];
|
||||
@@ -126,7 +126,7 @@ class GroupInviteResult {
|
||||
|
||||
class GroupMemberRole {
|
||||
String? uid;
|
||||
int? setRole; //0普通成员,2管理员
|
||||
int? setRole;
|
||||
|
||||
GroupMemberRole({this.uid, this.setRole});
|
||||
|
||||
|
||||
@@ -2,16 +2,16 @@ class UserInfo {
|
||||
String uid;
|
||||
String? name;
|
||||
String? icon;
|
||||
int? gender; // 0 未知,1 男,2 女
|
||||
int? gender;
|
||||
String? mobile;
|
||||
String? birth;
|
||||
String? email;
|
||||
String? ex;
|
||||
String? comment;
|
||||
int? isInBlackList; // 0 不在黑名单,1 在黑名单
|
||||
int? isInBlackList;
|
||||
String? reqMessage;
|
||||
String? applyTime;
|
||||
int? flag; // //0请求添加好友,1同意添加好友,-1拒绝添加好友
|
||||
int? flag;
|
||||
|
||||
UserInfo(
|
||||
{required this.uid,
|
||||
@@ -61,5 +61,25 @@ class UserInfo {
|
||||
return data;
|
||||
}
|
||||
|
||||
String get nickname => comment ?? name ?? uid;
|
||||
String getShowName() {
|
||||
if (null != comment && comment!.trim().isNotEmpty) {
|
||||
return comment!;
|
||||
} else if (null != name && name!.trim().isNotEmpty) {
|
||||
return name!;
|
||||
}
|
||||
return uid;
|
||||
}
|
||||
|
||||
bool get isMan => gender == 1;
|
||||
|
||||
bool get isWoman => gender == 2;
|
||||
|
||||
/// blacklist
|
||||
bool get isBlocked => isInBlackList == 1;
|
||||
|
||||
/// friend application
|
||||
bool get isAgreed => flag == 1;
|
||||
|
||||
/// friend application
|
||||
bool get isRejected => flag == -1;
|
||||
}
|
||||
|
||||
@@ -6,4 +6,6 @@ class OpenIM {
|
||||
const MethodChannel('flutter_openim_sdk');
|
||||
|
||||
static IMManager iMManager = IMManager(_channel);
|
||||
|
||||
OpenIM._();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user