parent
fb56f7747a
commit
a3752065fa
@ -0,0 +1,32 @@ |
|||||||
|
package io.openim.flutter_openim_sdk.listener; |
||||||
|
|
||||||
|
import io.openim.flutter_openim_sdk.util.CommonUtil; |
||||||
|
|
||||||
|
public class OnChannelListener implements open_im_sdk_callback.OnChannelListener { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onChannelDismissed(String s) { |
||||||
|
CommonUtil.emitEvent("channelListener", "onChannelDismissed", s); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onChannelInfoChanged(String s) { |
||||||
|
CommonUtil.emitEvent("channelListener", "onChannelInfoChanged", s); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onChannelMemberAdded(String s) { |
||||||
|
CommonUtil.emitEvent("channelListener", "onChannelMemberAdded", s); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onChannelMemberDeleted(String s) { |
||||||
|
CommonUtil.emitEvent("channelListener", "onChannelMemberDeleted", s); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onChannelMemberInfoChanged(String s) { |
||||||
|
CommonUtil.emitEvent("channelListener", "onChannelMemberInfoChanged", s); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,103 @@ |
|||||||
|
package io.openim.flutter_openim_sdk.manager; |
||||||
|
|
||||||
|
import io.flutter.plugin.common.MethodCall; |
||||||
|
import io.flutter.plugin.common.MethodChannel; |
||||||
|
import io.openim.flutter_openim_sdk.listener.OnBaseListener; |
||||||
|
import io.openim.flutter_openim_sdk.listener.OnChannelListener; |
||||||
|
import open_im_sdk.Open_im_sdk; |
||||||
|
|
||||||
|
public class ChannelManager extends BaseManager { |
||||||
|
|
||||||
|
public void setChannelListener(MethodCall methodCall, MethodChannel.Result result) { |
||||||
|
Open_im_sdk.setChannelListener(new OnChannelListener()); |
||||||
|
|
||||||
|
result.success(null); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void getChannelMembersInfo(MethodCall methodCall, MethodChannel.Result result) { |
||||||
|
Open_im_sdk.getSpecifiedChannelMembersInfo( |
||||||
|
new OnBaseListener(result, methodCall), |
||||||
|
value(methodCall, "operationID"), |
||||||
|
value(methodCall, "channelID"), |
||||||
|
jsonValue(methodCall, "userIDList") |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public void getChannelMemberList(MethodCall methodCall, MethodChannel.Result result) { |
||||||
|
Open_im_sdk.getChannelMemberList( |
||||||
|
new OnBaseListener(result, methodCall), |
||||||
|
value(methodCall, "operationID"), |
||||||
|
value(methodCall, "channelID"), |
||||||
|
value(methodCall, "filter"), |
||||||
|
value(methodCall, "offset"), |
||||||
|
value(methodCall, "count") |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void getChannelsInfo(MethodCall methodCall, MethodChannel.Result result) { |
||||||
|
Open_im_sdk.getSpecifiedChannelsInfo( |
||||||
|
new OnBaseListener(result, methodCall), |
||||||
|
value(methodCall, "operationID"), |
||||||
|
jsonValue(methodCall, "channelIDList") |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public void joinChannel(MethodCall methodCall, MethodChannel.Result result) { |
||||||
|
Open_im_sdk.joinChannel( |
||||||
|
new OnBaseListener(result, methodCall), |
||||||
|
value(methodCall, "operationID"), |
||||||
|
value(methodCall, "channelID"), |
||||||
|
value(methodCall, "reason"), |
||||||
|
value(methodCall, "joinSource"), |
||||||
|
value(methodCall, "ex") |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public void quitChannel(MethodCall methodCall, MethodChannel.Result result) { |
||||||
|
Open_im_sdk.quitChannel( |
||||||
|
new OnBaseListener(result, methodCall), |
||||||
|
value(methodCall, "operationID"), |
||||||
|
value(methodCall, "channelID") |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void changeChannelMute(MethodCall methodCall, MethodChannel.Result result) { |
||||||
|
Open_im_sdk.changeChannelMute( |
||||||
|
new OnBaseListener(result, methodCall), |
||||||
|
value(methodCall, "operationID"), |
||||||
|
value(methodCall, "channelID"), |
||||||
|
value(methodCall, "mute") |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public void changeChannelMemberMute(MethodCall methodCall, MethodChannel.Result result) { |
||||||
|
Open_im_sdk.changeChannelMemberMute( |
||||||
|
new OnBaseListener(result, methodCall), |
||||||
|
value(methodCall, "operationID"), |
||||||
|
value(methodCall, "channelID"), |
||||||
|
value(methodCall, "userID"), |
||||||
|
int2long(methodCall, "seconds") |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void isJoinChannel(MethodCall methodCall, MethodChannel.Result result) { |
||||||
|
Open_im_sdk.isJoinChannel(new OnBaseListener(result, methodCall), |
||||||
|
value(methodCall, "operationID"), |
||||||
|
value(methodCall, "channelID") |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public void getUsersInChannel(MethodCall methodCall, MethodChannel.Result result) { |
||||||
|
Open_im_sdk.getUsersInChannel(new OnBaseListener(result, methodCall), |
||||||
|
value(methodCall, "operationID"), |
||||||
|
value(methodCall, "channelID"), |
||||||
|
jsonValue(methodCall, "userIDs") |
||||||
|
); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,101 @@ |
|||||||
|
import Foundation |
||||||
|
import OpenIMCore |
||||||
|
|
||||||
|
public class ChannelManager: BaseServiceManager { |
||||||
|
|
||||||
|
public override func registerHandlers() { |
||||||
|
super.registerHandlers() |
||||||
|
|
||||||
|
// self["changeChannelMemberMute"] = changeChannelMemberMute |
||||||
|
// self["changeChannelMute"] = changeChannelMute |
||||||
|
|
||||||
|
// self["getChannelMemberList"] = getChannelMemberList |
||||||
|
|
||||||
|
|
||||||
|
self["getChannelMembersInfo"] = getChannelMembersInfo |
||||||
|
self["getChannelsInfo"] = getChannelsInfo |
||||||
|
|
||||||
|
|
||||||
|
self["getUsersInChannel"] = getUsersInChannel |
||||||
|
self["isJoinChannel"] = isJoinChannel |
||||||
|
self["joinChannel"] = joinChannel |
||||||
|
self["quitChannel"] = quitChannel |
||||||
|
self["setChannelListener"] = setChannelListener |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
// func changeChannelMemberMute(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { |
||||||
|
// Open_im_sdkChangeChannelMemberMute(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "channelID"], methodCall[string:"userID"], methodCall[int:"seconds"]) |
||||||
|
// } |
||||||
|
// |
||||||
|
// func changeChannelMute(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { |
||||||
|
// Open_im_sdkChangeChannelMute(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "channelID"], methodCall[bool: "mute"]) |
||||||
|
// } |
||||||
|
// |
||||||
|
// func getChannelMemberList(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { |
||||||
|
// Open_im_sdkGetChannelMemberList(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "channelID"], methodCall[int32: "filter"], |
||||||
|
// methodCall[int32: "offset"], methodCall[int32: "count"]) |
||||||
|
// } |
||||||
|
|
||||||
|
func getChannelMembersInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { |
||||||
|
Open_im_sdkGetSpecifiedChannelMembersInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "channelID"], methodCall[jsonString: "userIDList"]) |
||||||
|
} |
||||||
|
|
||||||
|
func getChannelsInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { |
||||||
|
Open_im_sdkGetSpecifiedChannelsInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "channelIDList"]) |
||||||
|
} |
||||||
|
|
||||||
|
func getUsersInChannel(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { |
||||||
|
Open_im_sdkGetUsersInChannel(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "channelID"], |
||||||
|
methodCall[jsonString: "userIDs"]) |
||||||
|
} |
||||||
|
|
||||||
|
func isJoinChannel(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { |
||||||
|
Open_im_sdkIsJoinChannel(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "channelID"]) |
||||||
|
} |
||||||
|
|
||||||
|
func joinChannel(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { |
||||||
|
Open_im_sdkJoinChannel(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "channelID"], methodCall[string: |
||||||
|
"reason"], methodCall[int32: "joinSource"], methodCall[jsonString: "ex"]) |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
func quitChannel(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { |
||||||
|
Open_im_sdkQuitChannel(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "channelID"]) |
||||||
|
} |
||||||
|
|
||||||
|
func setChannelListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult) { |
||||||
|
Open_im_sdkSetChannelListener(ChannelListener(channel: channel)) |
||||||
|
callBack(result) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public class ChannelListener: NSObject, Open_im_sdk_callbackOnChannelListenerProtocol { |
||||||
|
|
||||||
|
private let channel: FlutterMethodChannel |
||||||
|
|
||||||
|
init(channel: FlutterMethodChannel) { |
||||||
|
self.channel = channel |
||||||
|
} |
||||||
|
|
||||||
|
public func onChannelDismissed(_ s: String?) { |
||||||
|
CommonUtil.emitEvent(channel: channel, method: "channelListener", type: "onChannelDismissed", errCode: nil, errMsg: nil, data: s) |
||||||
|
} |
||||||
|
|
||||||
|
public func onChannelInfoChanged(_ s: String?) { |
||||||
|
CommonUtil.emitEvent(channel: channel, method: "channelListener", type: "onChannelInfoChanged", errCode: nil, errMsg: nil, data: s) |
||||||
|
} |
||||||
|
|
||||||
|
public func onChannelMemberAdded(_ s: String?) { |
||||||
|
CommonUtil.emitEvent(channel: channel, method: "channelListener", type: "onChannelMemberAdded", errCode: nil, errMsg: nil, data: s) |
||||||
|
} |
||||||
|
|
||||||
|
public func onChannelMemberDeleted(_ s: String?) { |
||||||
|
CommonUtil.emitEvent(channel: channel, method: "channelListener", type: "onChannelMemberDeleted", errCode: nil, errMsg: nil, data: s) |
||||||
|
} |
||||||
|
|
||||||
|
public func onChannelMemberInfoChanged(_ s: String?) { |
||||||
|
CommonUtil.emitEvent(channel: channel, method: "channelListener", type: "onChannelMemberInfoChanged", errCode: nil, errMsg: nil, data: s) |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,60 @@ |
|||||||
|
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; |
||||||
|
|
||||||
|
import '../models/channel_info.dart'; |
||||||
|
|
||||||
|
/// Channel Listener |
||||||
|
class OnChannelListener { |
||||||
|
|
||||||
|
Function(ChannelInfo info)? onChannelDismissed; |
||||||
|
Function(ChannelInfo info)? onChannelInfoChanged; |
||||||
|
Function(ChannelMembersInfo info)? onChannelMemberAdded; |
||||||
|
Function(ChannelMembersInfo info)? onChannelMemberDeleted; |
||||||
|
Function(ChannelMembersInfo info)? onChannelMemberInfoChanged; |
||||||
|
Function(ChannelInfo info)? onJoinedChannelAdded; |
||||||
|
Function(ChannelInfo info)? onJoinedChannelDeleted; |
||||||
|
|
||||||
|
OnChannelListener({ |
||||||
|
this.onChannelDismissed, |
||||||
|
this.onChannelInfoChanged, |
||||||
|
this.onChannelMemberAdded, |
||||||
|
this.onChannelMemberDeleted, |
||||||
|
this.onChannelMemberInfoChanged, |
||||||
|
this.onJoinedChannelAdded, |
||||||
|
this.onJoinedChannelDeleted, |
||||||
|
}); |
||||||
|
|
||||||
|
|
||||||
|
void channelDismissed(ChannelInfo info) { |
||||||
|
onChannelDismissed?.call(info); |
||||||
|
} |
||||||
|
|
||||||
|
/// Channel information changed |
||||||
|
void channelInfoChanged(ChannelInfo info) { |
||||||
|
onChannelInfoChanged?.call(info); |
||||||
|
} |
||||||
|
|
||||||
|
/// Channel member added |
||||||
|
void channelMemberAdded(ChannelMembersInfo info) { |
||||||
|
onChannelMemberAdded?.call(info); |
||||||
|
} |
||||||
|
|
||||||
|
/// Channel member deleted |
||||||
|
void channelMemberDeleted(ChannelMembersInfo info) { |
||||||
|
onChannelMemberDeleted?.call(info); |
||||||
|
} |
||||||
|
|
||||||
|
/// Channel member information changed |
||||||
|
void channelMemberInfoChanged(ChannelMembersInfo info) { |
||||||
|
onChannelMemberInfoChanged?.call(info); |
||||||
|
} |
||||||
|
|
||||||
|
/// Joined channel added |
||||||
|
void joinedChannelAdded(ChannelInfo info) { |
||||||
|
onJoinedChannelAdded?.call(info); |
||||||
|
} |
||||||
|
|
||||||
|
/// Joined channel deleted |
||||||
|
void joinedChannelDeleted(ChannelInfo info) { |
||||||
|
onJoinedChannelDeleted?.call(info); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,323 @@ |
|||||||
|
import 'dart:developer'; |
||||||
|
|
||||||
|
import 'package:flutter/services.dart'; |
||||||
|
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; |
||||||
|
import 'package:flutter_openim_sdk/src/models/set_channel_member_info.dart'; |
||||||
|
|
||||||
|
import '../listener/channel_listener.dart'; |
||||||
|
import '../models/channel_info.dart'; |
||||||
|
|
||||||
|
class ChannelManager { |
||||||
|
MethodChannel _channel; |
||||||
|
late OnChannelListener listener; |
||||||
|
|
||||||
|
ChannelManager(this._channel); |
||||||
|
|
||||||
|
/// Channel relationship listener |
||||||
|
Future setChannelListener(OnChannelListener listener) { |
||||||
|
this.listener = listener; |
||||||
|
return _channel.invokeMethod('setChannelListener', _buildParam({})); |
||||||
|
} |
||||||
|
|
||||||
|
/// Query channel member information |
||||||
|
/// [channelID] Channel ID |
||||||
|
/// [userIDList] List of user IDs |
||||||
|
Future<List<ChannelMembersInfo>> getChannelMembersInfo({ |
||||||
|
required String channelID, |
||||||
|
required List<String> userIDList, |
||||||
|
String? operationID, |
||||||
|
}) => |
||||||
|
_channel |
||||||
|
.invokeMethod( |
||||||
|
'getChannelMembersInfo', |
||||||
|
_buildParam({ |
||||||
|
'channelID': channelID, |
||||||
|
'userIDList': userIDList, |
||||||
|
"operationID": Utils.checkOperationID(operationID), |
||||||
|
})) |
||||||
|
.then((value) => |
||||||
|
Utils.toList(value, (map) => ChannelMembersInfo.fromJson(map))); |
||||||
|
|
||||||
|
/// Paginate and retrieve the channel member list |
||||||
|
/// [channelID] Channel ID |
||||||
|
/// [filter] Member filter (0: All, 1: Channel owner, 2: Administrator, 3: Regular member, 4: Admin + Regular member, 5: Channel owner + Admin) |
||||||
|
/// [offset] Starting index |
||||||
|
/// [count] Total count |
||||||
|
Future<List<ChannelMembersInfo>> getChannelMemberList({ |
||||||
|
required String channelID, |
||||||
|
int filter = 0, |
||||||
|
int offset = 0, |
||||||
|
int count = 0, |
||||||
|
String? operationID, |
||||||
|
}) => |
||||||
|
_channel |
||||||
|
.invokeMethod( |
||||||
|
'getChannelMemberList', |
||||||
|
_buildParam({ |
||||||
|
'channelID': channelID, |
||||||
|
'filter': filter, |
||||||
|
'offset': offset, |
||||||
|
'count': count, |
||||||
|
'operationID': Utils.checkOperationID(operationID), |
||||||
|
})) |
||||||
|
.then((value) => |
||||||
|
Utils.toList(value, (map) => ChannelMembersInfo.fromJson(map))); |
||||||
|
|
||||||
|
// /// Paginate and retrieve the channel member list as a map |
||||||
|
// /// [channelID] Channel ID |
||||||
|
// /// [filter] Member filter (0: All, 1: Channel owner, 2: Administrator, 3: Regular member, 4: Admin + Regular member, 5: Channel owner + Admin) |
||||||
|
// /// [offset] Starting index |
||||||
|
// /// [count] Total count |
||||||
|
// Future<List<dynamic>> getChannelMemberListMap({ |
||||||
|
// required String channelID, |
||||||
|
// int filter = 0, |
||||||
|
// int offset = 0, |
||||||
|
// int count = 0, |
||||||
|
// String? operationID, |
||||||
|
// }) => |
||||||
|
// _channel |
||||||
|
// .invokeMethod( |
||||||
|
// 'getChannelMemberList', |
||||||
|
// _buildParam({ |
||||||
|
// 'channelID': channelID, |
||||||
|
// 'filter': filter, |
||||||
|
// 'offset': offset, |
||||||
|
// 'count': count, |
||||||
|
// 'operationID': Utils.checkOperationID(operationID), |
||||||
|
// })) |
||||||
|
// .then((value) => Utils.toListMap(value)); |
||||||
|
|
||||||
|
// /// Query the list of joined channels |
||||||
|
// Future<List<ChannelInfo>> getJoinedChannelList({String? operationID}) => _channel |
||||||
|
// .invokeMethod( |
||||||
|
// 'getJoinedChannelList', |
||||||
|
// _buildParam({ |
||||||
|
// 'operationID': Utils.checkOperationID(operationID), |
||||||
|
// })) |
||||||
|
// .then((value) => Utils.toList(value, (map) => ChannelInfo.fromJson(map))); |
||||||
|
// |
||||||
|
// Future<List<ChannelInfo>> getJoinedChannelListPage({String? operationID, int offset = 0, int count = 40}) => _channel |
||||||
|
// .invokeMethod( |
||||||
|
// 'getJoinedChannelListPage', |
||||||
|
// _buildParam({ |
||||||
|
// 'offset': offset, |
||||||
|
// 'count': count, |
||||||
|
// 'operationID': Utils.checkOperationID(operationID), |
||||||
|
// })) |
||||||
|
// .then((value) => Utils.toList(value, (map) => ChannelInfo.fromJson(map))); |
||||||
|
|
||||||
|
// /// Query the list of joined channels |
||||||
|
// Future<List<dynamic>> getJoinedChannelListMap({String? operationID}) => |
||||||
|
// _channel |
||||||
|
// .invokeMethod( |
||||||
|
// 'getJoinedChannelList', |
||||||
|
// _buildParam({ |
||||||
|
// 'operationID': Utils.checkOperationID(operationID), |
||||||
|
// })) |
||||||
|
// .then((value) => Utils.toListMap(value)); |
||||||
|
|
||||||
|
/// Check if the user has joined a channel |
||||||
|
/// [channelID] Channel ID |
||||||
|
Future<bool> isJoinedChannel({ |
||||||
|
required String channelID, |
||||||
|
String? operationID, |
||||||
|
}) => |
||||||
|
_channel |
||||||
|
.invokeMethod( |
||||||
|
'isJoinChannel', |
||||||
|
_buildParam({ |
||||||
|
'channelID': channelID, |
||||||
|
'operationID': Utils.checkOperationID(operationID), |
||||||
|
})) |
||||||
|
.then((value) => value == 'true' ? true : false); |
||||||
|
|
||||||
|
/// Query channel information |
||||||
|
Future<List<ChannelInfo>> getChannelsInfo({ |
||||||
|
required List<String> channelIDList, |
||||||
|
String? operationID, |
||||||
|
}) => |
||||||
|
_channel |
||||||
|
.invokeMethod( |
||||||
|
'getChannelsInfo', |
||||||
|
_buildParam({ |
||||||
|
'channelIDList': channelIDList, |
||||||
|
'operationID': Utils.checkOperationID(operationID), |
||||||
|
})) |
||||||
|
.then((value) => |
||||||
|
Utils.toList(value, (map) => ChannelInfo.fromJson(map))); |
||||||
|
|
||||||
|
/// Apply to join a channel, requiring approval from an administrator or the channel. |
||||||
|
/// [joinSource] 2: Invited, 3: Searched, 4: Using a QR code |
||||||
|
Future<dynamic> joinChannel( |
||||||
|
{required String channelID, |
||||||
|
String? reason, |
||||||
|
String? operationID, |
||||||
|
int joinSource = 3, |
||||||
|
String? ex}) => |
||||||
|
_channel.invokeMethod( |
||||||
|
'joinChannel', |
||||||
|
_buildParam({ |
||||||
|
'channelID': channelID, |
||||||
|
'reason': reason, |
||||||
|
'joinSource': joinSource, |
||||||
|
'ex': ex, |
||||||
|
'operationID': Utils.checkOperationID(operationID), |
||||||
|
})); |
||||||
|
|
||||||
|
/// Exit a channel |
||||||
|
Future<dynamic> quitChannel({ |
||||||
|
required String channelID, |
||||||
|
String? operationID, |
||||||
|
}) => |
||||||
|
_channel.invokeMethod( |
||||||
|
'quitChannel', |
||||||
|
_buildParam({ |
||||||
|
'channelID': channelID, |
||||||
|
'operationID': Utils.checkOperationID(operationID), |
||||||
|
})); |
||||||
|
|
||||||
|
// |
||||||
|
// /// Query a channel |
||||||
|
// /// [keywordList] Search keywords; currently, only one keyword is supported, and it cannot be empty. |
||||||
|
// /// [isSearchChannelID] Whether to search by channel ID (Note: cannot set both to false at the same time); defaults to false if not set. |
||||||
|
// /// [isSearchChannelName] Whether to search by channel name; defaults to false if not set. |
||||||
|
// Future<List<ChannelInfo>> searchChannels({ |
||||||
|
// List<String> keywordList = const [], |
||||||
|
// bool isSearchChannelID = false, |
||||||
|
// bool isSearchChannelName = false, |
||||||
|
// String? operationID, |
||||||
|
// }) => |
||||||
|
// _channel |
||||||
|
// .invokeMethod( |
||||||
|
// 'searchChannels', |
||||||
|
// _buildParam({ |
||||||
|
// 'searchParam': { |
||||||
|
// 'keywordList': keywordList, |
||||||
|
// 'isSearchChannelID': isSearchChannelID, |
||||||
|
// 'isSearchChannelName': isSearchChannelName, |
||||||
|
// }, |
||||||
|
// 'operationID': Utils.checkOperationID(operationID), |
||||||
|
// })) |
||||||
|
// .then((value) => Utils.toList(value, (map) => ChannelInfo.fromJson(map))); |
||||||
|
|
||||||
|
// /// Get a channel member list based on join time |
||||||
|
// Future<List<ChannelMembersInfo>> getChannelMemberListByJoinTime({ |
||||||
|
// required String channelID, |
||||||
|
// int offset = 0, |
||||||
|
// int count = 0, |
||||||
|
// int joinTimeBegin = 0, |
||||||
|
// int joinTimeEnd = 0, |
||||||
|
// List<String> filterUserIDList = const [], |
||||||
|
// String? operationID, |
||||||
|
// }) => |
||||||
|
// _channel |
||||||
|
// .invokeMethod( |
||||||
|
// 'getChannelMemberListByJoinTimeFilter', |
||||||
|
// _buildParam({ |
||||||
|
// 'channelID': channelID, |
||||||
|
// 'offset': offset, |
||||||
|
// 'count': count, |
||||||
|
// 'joinTimeBegin': joinTimeBegin, |
||||||
|
// 'joinTimeEnd': joinTimeEnd, |
||||||
|
// 'excludeUserIDList': filterUserIDList, |
||||||
|
// 'operationID': Utils.checkOperationID(operationID), |
||||||
|
// })) |
||||||
|
// .then((value) => Utils.toList(value, (map) => ChannelMembersInfo.fromJson(map))); |
||||||
|
|
||||||
|
// /// Search for channel members |
||||||
|
// /// [channelID] Channel ID |
||||||
|
// /// [keywordList] Search keywords; currently, only one keyword is supported, and it cannot be empty. |
||||||
|
// /// [isSearchUserID] Whether to search by member ID |
||||||
|
// /// [isSearchMemberNickname] Whether to search by member nickname |
||||||
|
// /// [offset] Start index |
||||||
|
// /// [count] Total count to retrieve |
||||||
|
// Future<List<ChannelMembersInfo>> searchChannelMembers({ |
||||||
|
// required String channelID, |
||||||
|
// List<String> keywordList = const [], |
||||||
|
// bool isSearchUserID = false, |
||||||
|
// bool isSearchMemberNickname = false, |
||||||
|
// int offset = 0, |
||||||
|
// int count = 40, |
||||||
|
// String? operationID, |
||||||
|
// }) => |
||||||
|
// _channel |
||||||
|
// .invokeMethod( |
||||||
|
// 'searchChannelMembers', |
||||||
|
// _buildParam({ |
||||||
|
// 'searchParam': { |
||||||
|
// 'channelID': channelID, |
||||||
|
// 'keywordList': keywordList, |
||||||
|
// 'isSearchUserID': isSearchUserID, |
||||||
|
// 'isSearchMemberNickname': isSearchMemberNickname, |
||||||
|
// 'offset': offset, |
||||||
|
// 'count': count, |
||||||
|
// }, |
||||||
|
// 'operationID': Utils.checkOperationID(operationID), |
||||||
|
// })) |
||||||
|
// .then((value) => Utils.toList(value, (map) => ChannelMembersInfo.fromJson(map))); |
||||||
|
|
||||||
|
// /// Query a channel |
||||||
|
// /// [channelID] Channel ID |
||||||
|
// /// [keywordList] Search keyword, currently only supports searching with one keyword, and it cannot be empty |
||||||
|
// /// [isSearchUserID] Whether to search member IDs with the keyword |
||||||
|
// /// [isSearchMemberNickname] Whether to search member nicknames with the keyword |
||||||
|
// /// [offset] Starting index |
||||||
|
// /// [count] Total number to retrieve each time |
||||||
|
// Future<List<dynamic>> searchChannelMembersListMap({ |
||||||
|
// required String channelID, |
||||||
|
// List<String> keywordList = const [], |
||||||
|
// bool isSearchUserID = false, |
||||||
|
// bool isSearchMemberNickname = false, |
||||||
|
// int offset = 0, |
||||||
|
// int count = 40, |
||||||
|
// String? operationID, |
||||||
|
// }) => |
||||||
|
// _channel |
||||||
|
// .invokeMethod( |
||||||
|
// 'searchChannelMembers', |
||||||
|
// _buildParam({ |
||||||
|
// 'searchParam': { |
||||||
|
// 'channelID': channelID, |
||||||
|
// 'keywordList': keywordList, |
||||||
|
// 'isSearchUserID': isSearchUserID, |
||||||
|
// 'isSearchMemberNickname': isSearchMemberNickname, |
||||||
|
// 'offset': offset, |
||||||
|
// 'count': count, |
||||||
|
// }, |
||||||
|
// 'operationID': Utils.checkOperationID(operationID), |
||||||
|
// })) |
||||||
|
// .then((value) => Utils.toListMap(value)); |
||||||
|
// |
||||||
|
// /// Modify the ChannelMemberInfo ex field |
||||||
|
// Future<dynamic> setChannelMemberInfo({ |
||||||
|
// required SetChannelMemberInfo channelMembersInfo, |
||||||
|
// String? operationID, |
||||||
|
// }) => |
||||||
|
// _channel.invokeMethod( |
||||||
|
// 'setChannelMemberInfo', |
||||||
|
// _buildParam({ |
||||||
|
// 'info': channelMembersInfo.toJson(), |
||||||
|
// 'operationID': Utils.checkOperationID(operationID), |
||||||
|
// })); |
||||||
|
|
||||||
|
Future<dynamic> getUsersInChannel( |
||||||
|
String channelID, |
||||||
|
List<String> userIDs, { |
||||||
|
String? operationID, |
||||||
|
}) => |
||||||
|
_channel.invokeMethod( |
||||||
|
'getUsersInChannel', |
||||||
|
_buildParam({ |
||||||
|
'channelID': channelID, |
||||||
|
'userIDs': userIDs, |
||||||
|
'operationID': Utils.checkOperationID(operationID), |
||||||
|
})); |
||||||
|
|
||||||
|
static Map _buildParam(Map<String, dynamic> param) { |
||||||
|
param["ManagerName"] = "channelManager"; |
||||||
|
param = Utils.cleanMap(param); |
||||||
|
log('param: $param'); |
||||||
|
|
||||||
|
return param; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,165 @@ |
|||||||
|
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; |
||||||
|
|
||||||
|
/// Channel Information |
||||||
|
class ChannelInfo { |
||||||
|
/// Channel ID |
||||||
|
String channelID; |
||||||
|
|
||||||
|
/// Channel Name |
||||||
|
String? channelName; |
||||||
|
|
||||||
|
/// Channel Announcement |
||||||
|
String? notification; |
||||||
|
|
||||||
|
/// Channel Introduction |
||||||
|
String? introduction; |
||||||
|
|
||||||
|
/// Channel Avatar |
||||||
|
String? faceURL; |
||||||
|
|
||||||
|
/// Creation Time |
||||||
|
int? createTime; |
||||||
|
|
||||||
|
/// Number of Channel Members |
||||||
|
int? memberCount; |
||||||
|
|
||||||
|
/// Channel Status: 0 - Normal, 1 - Blocked, 2 - Dissolved, 3 - Muted |
||||||
|
int? status; |
||||||
|
|
||||||
|
/// Creator's ID |
||||||
|
String? creatorUserID; |
||||||
|
|
||||||
|
/// Channel Type [ChannelType] |
||||||
|
int? channelType; |
||||||
|
|
||||||
|
/// Extra Information |
||||||
|
String? ex; |
||||||
|
|
||||||
|
|
||||||
|
ChannelInfo({ |
||||||
|
required this.channelID, |
||||||
|
this.channelName, |
||||||
|
this.notification, |
||||||
|
this.introduction, |
||||||
|
this.faceURL, |
||||||
|
this.createTime, |
||||||
|
this.memberCount, |
||||||
|
this.status, |
||||||
|
this.creatorUserID, |
||||||
|
this.channelType, |
||||||
|
this.ex, |
||||||
|
}); |
||||||
|
|
||||||
|
ChannelInfo.fromJson(Map<String, dynamic> json) : channelID = json['channelID'] { |
||||||
|
channelName = json['channelName']; |
||||||
|
notification = json['notification']; |
||||||
|
introduction = json['introduction']; |
||||||
|
faceURL = json['faceURL']; |
||||||
|
createTime = json['createTime']; |
||||||
|
memberCount = json['memberCount']; |
||||||
|
status = json['status']; |
||||||
|
creatorUserID = json['creatorUserID']; |
||||||
|
channelType = json['channelType']; |
||||||
|
ex = json['ex']; |
||||||
|
} |
||||||
|
|
||||||
|
Map<String, dynamic> toJson() { |
||||||
|
final data = Map<String, dynamic>(); |
||||||
|
data['channelID'] = this.channelID; |
||||||
|
data['channelName'] = this.channelName; |
||||||
|
data['notification'] = this.notification; |
||||||
|
data['introduction'] = this.introduction; |
||||||
|
data['faceURL'] = this.faceURL; |
||||||
|
data['createTime'] = this.createTime; |
||||||
|
data['memberCount'] = this.memberCount; |
||||||
|
data['status'] = this.status; |
||||||
|
data['creatorUserID'] = this.creatorUserID; |
||||||
|
data['channelType'] = this.channelType; |
||||||
|
data['ex'] = this.ex; |
||||||
|
return data; |
||||||
|
} |
||||||
|
|
||||||
|
/// Corresponding Conversation Type for Channel Type |
||||||
|
int get sessionType => ConversationType.superChannel; |
||||||
|
|
||||||
|
@override |
||||||
|
bool operator ==(Object other) => |
||||||
|
identical(this, other) || other is ChannelInfo && runtimeType == other.runtimeType && channelID == other.channelID; |
||||||
|
|
||||||
|
@override |
||||||
|
int get hashCode => channelID.hashCode; |
||||||
|
} |
||||||
|
|
||||||
|
/// Channel Member Information |
||||||
|
class ChannelMembersInfo { |
||||||
|
/// Channel ID |
||||||
|
String? channelID; |
||||||
|
|
||||||
|
/// User ID |
||||||
|
String? userID; |
||||||
|
|
||||||
|
/// Nickname |
||||||
|
String? nickname; |
||||||
|
|
||||||
|
/// Avatar |
||||||
|
String? faceURL; |
||||||
|
|
||||||
|
/// Role [ChannelRoleLevel] |
||||||
|
int? roleLevel; |
||||||
|
|
||||||
|
/// Join Time |
||||||
|
int? joinTime; |
||||||
|
|
||||||
|
/// Extra Information |
||||||
|
String? ex; |
||||||
|
|
||||||
|
/// Mute End Time (seconds) |
||||||
|
int? muteEndTime; |
||||||
|
|
||||||
|
ChannelMembersInfo({ |
||||||
|
this.channelID, |
||||||
|
this.userID, |
||||||
|
this.roleLevel, |
||||||
|
this.joinTime, |
||||||
|
this.nickname, |
||||||
|
this.faceURL, |
||||||
|
this.ex, |
||||||
|
this.muteEndTime, |
||||||
|
}); |
||||||
|
|
||||||
|
ChannelMembersInfo.fromJson(Map<String, dynamic> json) { |
||||||
|
channelID = json['channelID']; |
||||||
|
userID = json['userID']; |
||||||
|
roleLevel = json['roleLevel']; |
||||||
|
joinTime = json['joinTime']; |
||||||
|
nickname = json['nickname']; |
||||||
|
faceURL = json['faceURL']; |
||||||
|
ex = json['ex']; |
||||||
|
muteEndTime = json['muteEndTime']; |
||||||
|
} |
||||||
|
|
||||||
|
Map<String, dynamic> toJson() { |
||||||
|
final data = Map<String, dynamic>(); |
||||||
|
data['channelID'] = this.channelID; |
||||||
|
data['userID'] = this.userID; |
||||||
|
data['roleLevel'] = this.roleLevel; |
||||||
|
data['joinTime'] = this.joinTime; |
||||||
|
data['nickname'] = this.nickname; |
||||||
|
data['faceURL'] = this.faceURL; |
||||||
|
data['ex'] = this.ex; |
||||||
|
data['muteEndTime'] = this.muteEndTime; |
||||||
|
|
||||||
|
return data; |
||||||
|
} |
||||||
|
|
||||||
|
@override |
||||||
|
bool operator ==(Object other) => |
||||||
|
identical(this, other) || |
||||||
|
other is ChannelMembersInfo && |
||||||
|
runtimeType == other.runtimeType && |
||||||
|
channelID == other.channelID && |
||||||
|
userID == other.userID; |
||||||
|
|
||||||
|
@override |
||||||
|
int get hashCode => channelID.hashCode ^ userID.hashCode; |
||||||
|
} |
@ -0,0 +1,41 @@ |
|||||||
|
class SetChannelMemberInfo { |
||||||
|
SetChannelMemberInfo({ |
||||||
|
required this.channelID, |
||||||
|
required this.userID, |
||||||
|
this.roleLevel, |
||||||
|
this.nickname, |
||||||
|
this.faceURL, |
||||||
|
this.ex, |
||||||
|
}); |
||||||
|
|
||||||
|
final String channelID; |
||||||
|
final String userID; |
||||||
|
final int? roleLevel; |
||||||
|
final String? nickname; |
||||||
|
final String? faceURL; |
||||||
|
final String? ex; |
||||||
|
|
||||||
|
SetChannelMemberInfo.fromJson(Map<String, dynamic> json) |
||||||
|
: channelID = json['channelID'], |
||||||
|
userID = json['userID'], |
||||||
|
roleLevel = json['roleLevel'], |
||||||
|
nickname = json['nickname'], |
||||||
|
faceURL = json['faceURL'], |
||||||
|
ex = json['ex']; |
||||||
|
|
||||||
|
Map<String, dynamic> toJson() { |
||||||
|
final data = Map<String, dynamic>(); |
||||||
|
data['channelID'] = channelID; |
||||||
|
data['userID'] = userID; |
||||||
|
data['roleLevel'] = roleLevel; |
||||||
|
data['nickname'] = nickname; |
||||||
|
data['faceURL'] = faceURL; |
||||||
|
data['ex'] = ex; |
||||||
|
return data; |
||||||
|
} |
||||||
|
|
||||||
|
@override |
||||||
|
String toString() { |
||||||
|
return 'SetChannelMemberInfo{channelID: $channelID, userID: $userID, roleLevel: $roleLevel, nickname: $nickname, faceURL: $faceURL, ex: $ex}'; |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue