fix bug
This commit is contained in:
94
lib/src/manager/im_conversation_manager.dart
Normal file
94
lib/src/manager/im_conversation_manager.dart
Normal file
@@ -0,0 +1,94 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
|
||||
|
||||
class ConversationManager {
|
||||
MethodChannel _channel;
|
||||
late ConversationListener conversationListener;
|
||||
|
||||
ConversationManager(this._channel);
|
||||
|
||||
void setConversationListener(ConversationListener listener) {
|
||||
this.conversationListener = listener;
|
||||
_channel.invokeMethod('setConversationListener', _buildParam({}));
|
||||
}
|
||||
|
||||
Future<List<ConversationInfo>> getAllConversationList() {
|
||||
return _channel
|
||||
.invokeMethod('getAllConversationList', _buildParam({}))
|
||||
.then((value) => _toList(value));
|
||||
}
|
||||
|
||||
/// sourceID 若为单聊则为userID,若为群聊则为groupID
|
||||
/// sessionType 若为单聊则为1,若为群聊则为2
|
||||
Future<ConversationInfo> getSingleConversation(
|
||||
{required String sourceID, required String sessionType}) {
|
||||
return _channel
|
||||
.invokeMethod('getOneConversation',
|
||||
_buildParam({"sourceID": sourceID, "sessionType": sessionType}))
|
||||
.then((value) => _toObj(value));
|
||||
}
|
||||
|
||||
/// ["single_1234","group_3434"]
|
||||
Future<List<ConversationInfo>> getMultipleConversation(
|
||||
{required List<String> conversationIDList}) {
|
||||
return _channel
|
||||
.invokeMethod('getMultipleConversation',
|
||||
_buildParam({"conversationIDList": conversationIDList}))
|
||||
.then((value) => _toList(value));
|
||||
}
|
||||
|
||||
void deleteConversation({required String conversationID}) {
|
||||
_channel
|
||||
.invokeMethod('deleteConversation',
|
||||
_buildParam({"conversationID": conversationID}))
|
||||
.then((value) => _printValue(value));
|
||||
}
|
||||
|
||||
void setConversationDraft(
|
||||
{required String conversationID, required String draftText}) {
|
||||
_channel
|
||||
.invokeMethod(
|
||||
'setConversationDraft',
|
||||
_buildParam(
|
||||
{"conversationID": conversationID, "draftText": draftText}))
|
||||
.then((value) => _printValue(value));
|
||||
}
|
||||
|
||||
void pinConversation(
|
||||
{required String conversationID, required bool isPinned}) {
|
||||
_channel
|
||||
.invokeMethod(
|
||||
'pinConversation',
|
||||
_buildParam(
|
||||
{"conversationID": conversationID, "isPinned": isPinned}))
|
||||
.then((value) => _printValue(value));
|
||||
}
|
||||
|
||||
Future<dynamic> getTotalUnreadMsgCount() {
|
||||
return _channel.invokeMethod('getTotalUnreadMsgCount', _buildParam({}));
|
||||
}
|
||||
|
||||
static Map _buildParam(Map param) {
|
||||
param["ManagerName"] = "conversationManager";
|
||||
return param;
|
||||
}
|
||||
|
||||
static List<ConversationInfo> _toList(String? value) {
|
||||
var list = _formatJson(value);
|
||||
if (null == list) return <ConversationInfo>[];
|
||||
return (list as List).map((e) => ConversationInfo.fromJson(e)).toList();
|
||||
}
|
||||
|
||||
static ConversationInfo _toObj(String value) =>
|
||||
ConversationInfo.fromJson(_formatJson(value));
|
||||
|
||||
static dynamic _formatJson(value) {
|
||||
return jsonDecode(_printValue(value));
|
||||
}
|
||||
|
||||
static String _printValue(value) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
112
lib/src/manager/im_friendship_manager.dart
Normal file
112
lib/src/manager/im_friendship_manager.dart
Normal file
@@ -0,0 +1,112 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
|
||||
|
||||
class FriendshipManager {
|
||||
MethodChannel _channel;
|
||||
late FriendshipListener friendshipListener;
|
||||
|
||||
FriendshipManager(this._channel);
|
||||
|
||||
void setFriendshipListener(FriendshipListener listener) {
|
||||
this.friendshipListener = listener;
|
||||
_channel.invokeMethod('setFriendListener', _buildParam({}));
|
||||
}
|
||||
|
||||
Future<List<UserInfo>> getFriendsInfo({required List<String> uidList}) {
|
||||
return _channel
|
||||
.invokeMethod('getFriendsInfo', _buildParam({"uidList": uidList}))
|
||||
.then((value) => _toList(value));
|
||||
}
|
||||
|
||||
Future<dynamic> addFriend({required String uid, required String reason}) {
|
||||
return _channel.invokeMethod(
|
||||
'addFriend', _buildParam({"uid": uid, "reqMessage": reason}));
|
||||
}
|
||||
|
||||
Future<List<UserInfo>> getFriendApplicationList() {
|
||||
return _channel
|
||||
.invokeMethod('getFriendApplicationList', _buildParam({}))
|
||||
.then((value) => _toList(value));
|
||||
}
|
||||
|
||||
Future<List<UserInfo>> getFriendList() {
|
||||
return _channel
|
||||
.invokeMethod('getFriendList', _buildParam({}))
|
||||
.then((value) => _toList(value));
|
||||
}
|
||||
|
||||
Future<dynamic> setFriendInfo({required UserInfo info}) {
|
||||
return _channel.invokeMethod('setFriendInfo', _buildParam(info.toJson()));
|
||||
}
|
||||
|
||||
Future<dynamic> addToBlackList({required String uid}) {
|
||||
return _channel.invokeMethod('addToBlackList', _buildParam({"uid": uid}));
|
||||
}
|
||||
|
||||
Future<List<UserInfo>> getBlackList() {
|
||||
return _channel
|
||||
.invokeMethod('getBlackList', _buildParam({}))
|
||||
.then((value) => _toList(value));
|
||||
}
|
||||
|
||||
Future<dynamic> deleteFromBlackList({required String uid}) {
|
||||
return _channel.invokeMethod(
|
||||
'deleteFromBlackList', _buildParam({"uid": uid}));
|
||||
}
|
||||
|
||||
Future<List<UserInfo>> checkFriend(List<String> uidList) {
|
||||
return _channel
|
||||
.invokeMethod('checkFriend', _buildParam({'uidList': uidList}))
|
||||
.then((value) => _toList(value));
|
||||
}
|
||||
|
||||
Future<dynamic> deleteFromFriendList({required String uid}) {
|
||||
return _channel.invokeMethod(
|
||||
'deleteFromFriendList', _buildParam({"uid": uid}));
|
||||
}
|
||||
|
||||
Future<dynamic> acceptFriendApplication({required String uid}) {
|
||||
return _channel.invokeMethod(
|
||||
'acceptFriendApplication', _buildParam({"uid": uid}));
|
||||
}
|
||||
|
||||
Future<dynamic> refuseFriendApplication({required String uid}) {
|
||||
return _channel.invokeMethod(
|
||||
'refuseFriendApplication', _buildParam({"uid": uid}));
|
||||
}
|
||||
|
||||
Future<dynamic> forceSyncFriendApplication() {
|
||||
return _channel.invokeMethod('forceSyncFriendApplication', _buildParam({}));
|
||||
}
|
||||
|
||||
Future<dynamic> forceSyncFriend() {
|
||||
return _channel.invokeMethod('forceSyncFriend', _buildParam({}));
|
||||
}
|
||||
|
||||
Future<dynamic> forceSyncBlackList() {
|
||||
return _channel.invokeMethod('forceSyncBlackList', _buildParam({}));
|
||||
}
|
||||
|
||||
static Map _buildParam(Map param) {
|
||||
param["ManagerName"] = "friendshipManager";
|
||||
return param;
|
||||
}
|
||||
|
||||
static List<UserInfo> _toList(String? value) {
|
||||
var list = _formatJson(value);
|
||||
if (null == list) return <UserInfo>[];
|
||||
return (list as List).map((e) => UserInfo.fromJson(e)).toList();
|
||||
}
|
||||
|
||||
static UserInfo _toObj(String value) => UserInfo.fromJson(_formatJson(value));
|
||||
|
||||
static dynamic _formatJson(value) {
|
||||
return jsonDecode(_printValue(value));
|
||||
}
|
||||
|
||||
static String _printValue(value) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
7
lib/src/manager/im_group_manager.dart
Normal file
7
lib/src/manager/im_group_manager.dart
Normal file
@@ -0,0 +1,7 @@
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
class GroupManager{
|
||||
MethodChannel _channel;
|
||||
|
||||
GroupManager(this._channel);
|
||||
}
|
||||
317
lib/src/manager/im_manager.dart
Normal file
317
lib/src/manager/im_manager.dart
Normal file
@@ -0,0 +1,317 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
|
||||
|
||||
class IMManager {
|
||||
MethodChannel _channel;
|
||||
late ConversationManager conversationManager;
|
||||
late FriendshipManager friendshipManager;
|
||||
late MessageManager messageManager;
|
||||
late GroupManager groupManager;
|
||||
late OfflinePushManager offlinePushManager;
|
||||
late SignalingManager signalingManager;
|
||||
late InitSDKListener _initSDKListener;
|
||||
|
||||
IMManager(this._channel) {
|
||||
conversationManager = ConversationManager(_channel);
|
||||
friendshipManager = FriendshipManager(_channel);
|
||||
messageManager = MessageManager(_channel);
|
||||
groupManager = GroupManager(_channel);
|
||||
offlinePushManager = OfflinePushManager(_channel);
|
||||
signalingManager = SignalingManager(_channel);
|
||||
addNativeCallback(_channel);
|
||||
}
|
||||
|
||||
void addNativeCallback(MethodChannel _channel) {
|
||||
_channel.setMethodCallHandler((call) {
|
||||
try {
|
||||
if (call.method == ListenerType.initSDKListener) {
|
||||
String type = call.arguments['type'];
|
||||
dynamic data = call.arguments['data'];
|
||||
switch (type) {
|
||||
case 'onSelfInfoUpdated':
|
||||
var u = UserInfo.fromJson(_formatJson(data));
|
||||
_initSDKListener.onSelfInfoUpdated(u);
|
||||
break;
|
||||
case 'onConnectFailed':
|
||||
int? errCode = call.arguments['errCode'];
|
||||
String? errMsg = call.arguments['errMsg'];
|
||||
_initSDKListener.onConnectFailed(errCode, errMsg);
|
||||
break;
|
||||
case 'onConnecting':
|
||||
_initSDKListener.onConnecting();
|
||||
break;
|
||||
case 'onConnectSuccess':
|
||||
_initSDKListener.onConnectSuccess();
|
||||
break;
|
||||
case 'onKickedOffline':
|
||||
_initSDKListener.onKickedOffline();
|
||||
break;
|
||||
case 'onUserSigExpired':
|
||||
_initSDKListener.onUserSigExpired();
|
||||
break;
|
||||
}
|
||||
} 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']);
|
||||
|
||||
switch (type) {
|
||||
case 'onMemberEnter':
|
||||
break;
|
||||
case 'onMemberLeave':
|
||||
break;
|
||||
case 'onMemberInvited':
|
||||
break;
|
||||
case 'onMemberKicked':
|
||||
break;
|
||||
case 'onMemberInfoChanged':
|
||||
break;
|
||||
case 'onGroupCreated':
|
||||
break;
|
||||
case 'onGroupDismissed':
|
||||
break;
|
||||
case 'onGroupRecycled':
|
||||
break;
|
||||
case 'onGroupInfoChanged':
|
||||
break;
|
||||
case 'onReceiveJoinApplication':
|
||||
break;
|
||||
case 'onApplicationProcessed':
|
||||
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'];
|
||||
var id = call.arguments['data']['id'];
|
||||
var msg =
|
||||
Message.fromJson(_formatJson(call.arguments['data']['message']));
|
||||
switch (type) {
|
||||
case 'onRecvNewMessage':
|
||||
for (var listener in messageManager.advancedMsgListeners) {
|
||||
if (listener.id == id) {
|
||||
listener.onRecvNewMessage(msg);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'onRecvMessageRevoked':
|
||||
for (var listener in messageManager.advancedMsgListeners) {
|
||||
if (listener.id == id) {
|
||||
listener.onRecvMessageRevoked(msg);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'onRecvC2CReadReceipt':
|
||||
for (var listener in messageManager.advancedMsgListeners) {
|
||||
if (listener.id == id) {
|
||||
listener.onRecvC2CReadReceipt(msg);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
} else if (call.method == ListenerType.msgSendProgressListener) {
|
||||
String type = call.arguments['type'];
|
||||
dynamic data = call.arguments['data'];
|
||||
String msgID = data['clientMsgID'] ?? '';
|
||||
int progress = data['progress'] ?? 100;
|
||||
switch (type) {
|
||||
case 'onProgress':
|
||||
messageManager.msgSendProgressListener?.onProgress(
|
||||
msgID,
|
||||
progress,
|
||||
);
|
||||
break;
|
||||
}
|
||||
} else if (call.method == ListenerType.conversationListener) {
|
||||
String type = call.arguments['type'];
|
||||
dynamic data = call.arguments['data'];
|
||||
switch (type) {
|
||||
case 'onSyncServerStart':
|
||||
conversationManager.conversationListener.onSyncServerStart();
|
||||
break;
|
||||
case 'onSyncServerFinish':
|
||||
conversationManager.conversationListener.onSyncServerFinish();
|
||||
break;
|
||||
|
||||
case 'onSyncServerFailed':
|
||||
conversationManager.conversationListener.onSyncServerFailed();
|
||||
break;
|
||||
case 'onNewConversation':
|
||||
List<ConversationInfo> list = List.empty(growable: true);
|
||||
if (null != data) {
|
||||
list = (_formatJson(data) as List)
|
||||
.map((e) => ConversationInfo.fromJson(e))
|
||||
.toList();
|
||||
}
|
||||
conversationManager.conversationListener.onNewConversation(list);
|
||||
break;
|
||||
case 'onConversationChanged':
|
||||
List<ConversationInfo> list = List.empty(growable: true);
|
||||
if (null != data) {
|
||||
list = (_formatJson(data) as List)
|
||||
.map((e) => ConversationInfo.fromJson(e))
|
||||
.toList();
|
||||
}
|
||||
conversationManager.conversationListener
|
||||
.onConversationChanged(list);
|
||||
break;
|
||||
case 'onTotalUnreadMessageCountChanged':
|
||||
conversationManager.conversationListener
|
||||
.onTotalUnreadMessageCountChanged(data ?? 0);
|
||||
break;
|
||||
}
|
||||
} else if (call.method == ListenerType.friendListener) {
|
||||
String type = call.arguments['type'];
|
||||
dynamic data = call.arguments['data'];
|
||||
switch (type) {
|
||||
case 'onBlackListAdd':
|
||||
friendshipManager.friendshipListener.onBlackListAdd(data);
|
||||
break;
|
||||
case 'onBlackListDeleted':
|
||||
friendshipManager.friendshipListener.onBlackListDeleted(data);
|
||||
break;
|
||||
case 'onFriendApplicationListAccept':
|
||||
friendshipManager.friendshipListener
|
||||
.onFriendApplicationListAccept(data);
|
||||
break;
|
||||
case 'onFriendApplicationListAdded':
|
||||
friendshipManager.friendshipListener
|
||||
.onFriendApplicationListAdded(data);
|
||||
break;
|
||||
case 'onFriendApplicationListDeleted':
|
||||
friendshipManager.friendshipListener
|
||||
.onFriendApplicationListDeleted(data);
|
||||
break;
|
||||
case 'onFriendApplicationListReject':
|
||||
friendshipManager.friendshipListener
|
||||
.onFriendApplicationListReject(data);
|
||||
break;
|
||||
case 'onFriendInfoChanged':
|
||||
friendshipManager.friendshipListener.onFriendInfoChanged(data);
|
||||
break;
|
||||
case 'onFriendListAdded':
|
||||
friendshipManager.friendshipListener.onFriendListAdded(data);
|
||||
break;
|
||||
case 'onFriendListDeleted':
|
||||
friendshipManager.friendshipListener.onFriendListDeleted(data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
print(
|
||||
"回调失败了,数据类型异常。$err ${call.method} ${call.arguments['type']} ${call.arguments['data']}");
|
||||
}
|
||||
return Future.value(null);
|
||||
});
|
||||
}
|
||||
|
||||
Future<dynamic> initSDK({
|
||||
required int platform,
|
||||
required String ipApi,
|
||||
required String ipWs,
|
||||
required String dbPath,
|
||||
required InitSDKListener listener,
|
||||
}) {
|
||||
_initSDKListener = listener;
|
||||
return _channel.invokeMethod(
|
||||
'initSDK',
|
||||
_buildParam(
|
||||
{"platform": platform, "ipApi": ipApi, "ipWs": ipWs, "dbDir": dbPath},
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Future<dynamic> unInitSDK() {
|
||||
return _channel.invokeMethod('unInitSDK', _buildParam({}));
|
||||
}
|
||||
|
||||
Future<dynamic> login({required String uid, required String token}) {
|
||||
return _channel.invokeMethod(
|
||||
'login',
|
||||
_buildParam({'uid': uid, 'token': token}),
|
||||
);
|
||||
}
|
||||
|
||||
Future<dynamic> logout() {
|
||||
return _channel.invokeMethod('logout', _buildParam({}));
|
||||
}
|
||||
|
||||
Future<int?> getLoginStatus() {
|
||||
return _channel.invokeMethod<int>('getLoginStatus', _buildParam({}));
|
||||
}
|
||||
|
||||
Future<String?> getLoginUid() {
|
||||
return _channel.invokeMethod<String>('getLoginUid', _buildParam({}));
|
||||
}
|
||||
|
||||
Future<String?> setSelfInfo(UserInfo info) {
|
||||
return _channel.invokeMethod('setSelfInfo', _buildParam(info.toJson()));
|
||||
// .then((value) => UserInfo.fromJson(value));
|
||||
}
|
||||
|
||||
Future<List<UserInfo>> getUsersInfo(List<String> uidList) {
|
||||
return _channel
|
||||
.invokeMethod('getUsersInfo', _buildParam({'uidList': uidList}))
|
||||
.then((value) => _toList(value));
|
||||
}
|
||||
|
||||
Future<dynamic> forceSyncLoginUerInfo(List<String> uidList) {
|
||||
return _channel.invokeMethod('forceSyncLoginUerInfo', _buildParam({}));
|
||||
}
|
||||
|
||||
static Map _buildParam(Map param) {
|
||||
param["ManagerName"] = "imManager";
|
||||
return param;
|
||||
}
|
||||
|
||||
static List<UserInfo> _toList(String value) =>
|
||||
(_formatJson(value) as List).map((e) => UserInfo.fromJson(e)).toList();
|
||||
|
||||
static dynamic _formatJson(value) {
|
||||
return jsonDecode(_printValue(value));
|
||||
}
|
||||
|
||||
static String _printValue(value) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
213
lib/src/manager/im_message_manager.dart
Normal file
213
lib/src/manager/im_message_manager.dart
Normal file
@@ -0,0 +1,213 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
|
||||
|
||||
class MessageManager {
|
||||
MethodChannel _channel;
|
||||
List<AdvancedMsgListener> advancedMsgListeners = List.empty(growable: true);
|
||||
MsgSendProgressListener? msgSendProgressListener;
|
||||
|
||||
MessageManager(this._channel);
|
||||
|
||||
void addAdvancedMsgListener(AdvancedMsgListener listener) {
|
||||
advancedMsgListeners.add(listener);
|
||||
_channel.invokeMethod(
|
||||
'addAdvancedMsgListener', _buildParam({'id': listener.id}));
|
||||
}
|
||||
|
||||
void removeAdvancedMsgListener(AdvancedMsgListener listener) {
|
||||
advancedMsgListeners.remove(listener);
|
||||
_channel.invokeMethod(
|
||||
'removeAdvancedMsgListener', _buildParam({'id': listener.id}));
|
||||
}
|
||||
|
||||
void setMsgSendProgressListener(MsgSendProgressListener listener) {
|
||||
msgSendProgressListener = listener;
|
||||
}
|
||||
|
||||
/*Future<Message> */
|
||||
Future<dynamic> sendMessage({
|
||||
required Message message,
|
||||
String? receiver,
|
||||
String? groupID,
|
||||
required bool onlineUserOnly,
|
||||
}) {
|
||||
return _channel.invokeMethod(
|
||||
'sendMessage',
|
||||
_buildParam({
|
||||
'message': message.toJson(),
|
||||
'receiver': receiver ?? '',
|
||||
'groupID': groupID ?? '',
|
||||
'onlineUserOnly': onlineUserOnly,
|
||||
}))
|
||||
/*.then((value) => _toObj(value))*/;
|
||||
}
|
||||
|
||||
Future<List<Message>> getHistoryMessageList({
|
||||
String? userID,
|
||||
Message? startMsg,
|
||||
String? groupID,
|
||||
int? count,
|
||||
}) {
|
||||
return _channel
|
||||
.invokeMethod(
|
||||
'getHistoryMessageList',
|
||||
_buildParam({
|
||||
'userID': userID ?? '',
|
||||
'startMsg': startMsg?.toJson() /*?? {}*/,
|
||||
'groupID': groupID ?? '',
|
||||
'count': count ?? 10,
|
||||
}))
|
||||
.then((value) => _toList(value));
|
||||
}
|
||||
|
||||
void revokeMessage({required Message message}) {
|
||||
_channel.invokeMethod('revokeMessage', _buildParam(message.toJson()));
|
||||
}
|
||||
|
||||
Future deleteMessageFromLocalStorage({required Message message}) {
|
||||
return _channel.invokeMethod(
|
||||
'deleteMessageFromLocalStorage', _buildParam(message.toJson()));
|
||||
}
|
||||
|
||||
void deleteMessages({required List<Message> msgList}) {
|
||||
_channel.invokeMethod('deleteMessages',
|
||||
_buildParam({"msgList": msgList.map((e) => e.toJson()).toList()}));
|
||||
}
|
||||
|
||||
void insertSingleMessageToLocalStorage({
|
||||
String? userID,
|
||||
Message? message,
|
||||
String? sender,
|
||||
}) {
|
||||
_channel.invokeMethod(
|
||||
'insertSingleMessageToLocalStorage',
|
||||
_buildParam({
|
||||
"userID": userID,
|
||||
"message": message?.toJson(),
|
||||
"sender": sender,
|
||||
}));
|
||||
}
|
||||
|
||||
void findMessages({required List<String> messageIDList}) {
|
||||
_channel.invokeMethod(
|
||||
'findMessages',
|
||||
_buildParam({
|
||||
"messageIDList": messageIDList,
|
||||
}));
|
||||
}
|
||||
|
||||
Future<dynamic> markSingleMessageHasRead({required String userID}) {
|
||||
return _channel.invokeMethod(
|
||||
'markSingleMessageHasRead', _buildParam({'userID': userID}));
|
||||
}
|
||||
|
||||
Future<Message> createTextMessage({required String text}) {
|
||||
return _channel
|
||||
.invokeMethod('createTextMessage', _buildParam({'text': text}))
|
||||
.then((value) => _toObj(value));
|
||||
}
|
||||
|
||||
Future<Message> createTextAtMessage({
|
||||
required String text,
|
||||
required List<String> atUserList,
|
||||
}) {
|
||||
return _channel
|
||||
.invokeMethod(
|
||||
'createTextAtMessage',
|
||||
_buildParam({
|
||||
'text': text,
|
||||
'atUserList': atUserList,
|
||||
}),
|
||||
)
|
||||
.then((value) => _toObj(value));
|
||||
}
|
||||
|
||||
Future<Message> createImageMessage({required String imagePath}) {
|
||||
return _channel
|
||||
.invokeMethod(
|
||||
'createImageMessage',
|
||||
_buildParam({'imagePath': imagePath}),
|
||||
)
|
||||
.then((value) => _toObj(value));
|
||||
}
|
||||
|
||||
Future<Message> createSoundMessage(
|
||||
{required String soundPath, required int duration}) {
|
||||
return _channel
|
||||
.invokeMethod(
|
||||
'createSoundMessage',
|
||||
_buildParam({'soundPath': soundPath, "duration": duration}),
|
||||
)
|
||||
.then((value) => _toObj(value));
|
||||
}
|
||||
|
||||
Future<Message> createVideoMessage({
|
||||
required String videoPath,
|
||||
required String videoType,
|
||||
required int duration,
|
||||
required String snapshotPath,
|
||||
}) {
|
||||
return _channel
|
||||
.invokeMethod(
|
||||
'createVideoMessage',
|
||||
_buildParam({
|
||||
'videoPath': videoPath,
|
||||
'videoType': videoType,
|
||||
'duration': duration,
|
||||
'snapshotPath': snapshotPath,
|
||||
}))
|
||||
.then((value) => _toObj(value));
|
||||
}
|
||||
|
||||
Future<Message> createFileMessage(
|
||||
{required String filePath, required String fileName}) {
|
||||
return _channel
|
||||
.invokeMethod('createFileMessage',
|
||||
_buildParam({'filePath': filePath, 'fileName': fileName}))
|
||||
.then((value) => _toObj(value));
|
||||
}
|
||||
|
||||
Future<Message> createMergerMessage(
|
||||
{required List<Message> messageList,
|
||||
required String title,
|
||||
required List<String> summaryList}) {
|
||||
return _channel
|
||||
.invokeMethod(
|
||||
'createMergerMessage',
|
||||
_buildParam({
|
||||
'messageList': messageList.map((e) => e.toJson()).toList(),
|
||||
'title': title,
|
||||
'summaryList': summaryList,
|
||||
}))
|
||||
.then((value) => _toObj(value));
|
||||
}
|
||||
|
||||
Future<Message> createForwardMessage({required List<Message> messageList}) {
|
||||
return _channel
|
||||
.invokeMethod(
|
||||
'createForwardMessage',
|
||||
_buildParam(
|
||||
{'message': messageList.map((e) => e.toJson()).toList()}))
|
||||
.then((value) => _toObj(value));
|
||||
}
|
||||
|
||||
static Map _buildParam(Map param) {
|
||||
param["ManagerName"] = "messageManager";
|
||||
return param;
|
||||
}
|
||||
|
||||
static List<Message> _toList(String value) =>
|
||||
(_formatJson(value) as List).map((e) => Message.fromJson(e)).toList();
|
||||
|
||||
static Message _toObj(String value) => Message.fromJson(_formatJson(value));
|
||||
|
||||
static dynamic _formatJson(value) {
|
||||
return jsonDecode(_printValue(value));
|
||||
}
|
||||
|
||||
static String _printValue(value) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
7
lib/src/manager/im_offline_push_manager.dart
Normal file
7
lib/src/manager/im_offline_push_manager.dart
Normal file
@@ -0,0 +1,7 @@
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
class OfflinePushManager{
|
||||
MethodChannel _channel;
|
||||
|
||||
OfflinePushManager(this._channel);
|
||||
}
|
||||
7
lib/src/manager/im_signaling_manager.dart
Normal file
7
lib/src/manager/im_signaling_manager.dart
Normal file
@@ -0,0 +1,7 @@
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
class SignalingManager {
|
||||
MethodChannel _channel;
|
||||
|
||||
SignalingManager(this._channel);
|
||||
}
|
||||
Reference in New Issue
Block a user