Skip to content

Commit 9c3e25f

Browse files
committed
fix files message progress.
1 parent 14fb2f3 commit 9c3e25f

File tree

2 files changed

+82
-58
lines changed

2 files changed

+82
-58
lines changed

lib/src/em_chat_manager.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import 'package:flutter/services.dart';
44
import 'tools/em_extension.dart';
55
import '../im_flutter_sdk.dart';
66
import 'internal/chat_method_keys.dart';
7-
import 'tools/em_message_callback_manager.dart';
87

98
class EMChatManager {
109
static const _channelPrefix = 'com.chat.im';

lib/src/models/em_message.dart

Lines changed: 82 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
import 'dart:math';
22

3-
import '../tools/em_log.dart';
4-
5-
import '../tools/em_message_callback_manager.dart';
3+
import 'package:flutter/services.dart';
4+
import '../internal/chat_method_keys.dart';
65
import '../tools/em_extension.dart';
76
import '../../im_flutter_sdk.dart';
8-
import '../internal/em_message_state_handle.dart';
97

108
// 消息类型
119
enum EMMessageChatType {
@@ -68,30 +66,58 @@ abstract class EMMessageStatusListener {
6866
void onStatusChanged() {}
6967
}
7068

71-
class EMMessage {
72-
EMMessage._private() {
73-
_tmpKey = localTime.toString();
69+
class MessageCallBackManager {
70+
static const _channelPrefix = 'com.chat.im';
71+
static const MethodChannel _emMessageChannel =
72+
const MethodChannel('$_channelPrefix/chat_message', JSONMethodCodec());
73+
Map<String, EMMessage> cacheMessageMap = {};
74+
static MessageCallBackManager? _instance;
75+
static MessageCallBackManager get getInstance =>
76+
_instance = _instance ?? MessageCallBackManager._internal();
77+
MessageCallBackManager._internal() {
78+
_emMessageChannel.setMethodCallHandler((MethodCall call) async {
79+
Map<String, dynamic> argMap = call.arguments;
80+
int? localTime = argMap['localTime'];
81+
EMMessage? msg = cacheMessageMap[localTime.toString()];
82+
if (msg == null) {
83+
return null;
84+
}
85+
if (call.method == ChatMethodKeys.onMessageProgressUpdate) {
86+
return msg._onMessageProgressChanged(argMap);
87+
} else if (call.method == ChatMethodKeys.onMessageError) {
88+
return msg._onMessageError(argMap);
89+
} else if (call.method == ChatMethodKeys.onMessageSuccess) {
90+
return msg._onMessageSuccess(argMap);
91+
} else if (call.method == ChatMethodKeys.onMessageReadAck) {
92+
return msg._onMessageReadAck(argMap);
93+
} else if (call.method == ChatMethodKeys.onMessageDeliveryAck) {
94+
return msg._onMessageDeliveryAck(argMap);
95+
} else if (call.method == ChatMethodKeys.onMessageStatusChanged) {
96+
return msg._onMessageStatusChanged(argMap);
97+
}
98+
return null;
99+
});
100+
}
101+
102+
addMessage(EMMessage message) {
103+
cacheMessageMap[message.localTime.toString()] = message;
104+
}
105+
106+
removeMessage(EMMessage message) {
107+
if (cacheMessageMap.containsKey(message.localTime.toString())) {
108+
cacheMessageMap.remove(message.localTime.toString());
109+
}
74110
}
111+
}
75112

76-
late EMMessageStateHandle _handle;
113+
class EMMessage {
114+
EMMessage._private();
77115

78116
/// 构造接收的消息
79117
EMMessage.createReceiveMessage({
80118
required this.body,
81119
this.direction = EMMessageDirection.RECEIVE,
82-
}) {
83-
_tmpKey = localTime.toString();
84-
_handle = EMMessageStateHandle(
85-
_tmpKey,
86-
onMessageDeliveryAck: _onMessageDeliveryAck,
87-
onMessageError: _onMessageError,
88-
onMessageProgressChanged: _onMessageProgressChanged,
89-
onMessageReadAck: _onMessageReadAck,
90-
onMessageSuccess: _onMessageSuccess,
91-
onMessageStatusChanged: _onMessageStatusChanged,
92-
);
93-
MessageCallBackManager.getInstance.addMessage(_tmpKey, _handle);
94-
}
120+
});
95121

96122
/// 构造发送的消息
97123
EMMessage.createSendMessage({
@@ -100,74 +126,70 @@ class EMMessage {
100126
this.to,
101127
this.hasRead = true,
102128
}) : this.from = EMClient.getInstance.currentUsername,
103-
this.conversationId = to {
104-
_tmpKey = localTime.toString();
105-
_handle = EMMessageStateHandle(
106-
_tmpKey,
107-
onMessageDeliveryAck: _onMessageDeliveryAck,
108-
onMessageError: _onMessageError,
109-
onMessageProgressChanged: _onMessageProgressChanged,
110-
onMessageReadAck: _onMessageReadAck,
111-
onMessageSuccess: _onMessageSuccess,
112-
onMessageStatusChanged: _onMessageStatusChanged,
113-
);
114-
MessageCallBackManager.getInstance.addMessage(_tmpKey, _handle);
115-
}
129+
this.conversationId = to;
116130

117131
void dispose() {
118-
MessageCallBackManager.getInstance.removeMessage(_tmpKey);
119-
// listener = null;
132+
MessageCallBackManager.getInstance.removeMessage(this);
120133
}
121134

122-
void _onMessageError(Map<String, dynamic> map) {
123-
EMLog.v('发送失败 -- ' + map.toString());
135+
Future<void>? _onMessageError(Map map) {
124136
EMMessage msg = EMMessage.fromJson(map['message']);
125137
this._msgId = msg.msgId;
126138
this.status = msg.status;
127139
this.body = msg.body;
128-
listener?.onError(EMError.fromJson(map['error']));
140+
if (listener != null) {
141+
listener!.onError(EMError.fromJson(map['error']));
142+
}
129143
return null;
130144
}
131145

132-
void _onMessageProgressChanged(Map<String, dynamic> map) {
133-
EMLog.v(
134-
'发送 -- ' + ' msg_id: ' + this.msgId! + ' ' + map['progress'].toString(),
135-
);
136-
int progress = map['progress'];
137-
listener?.onProgress(progress);
146+
Future<void>? _onMessageProgressChanged(Map map) {
147+
if (this.listener != null) {
148+
int progress = map['progress'];
149+
listener!.onProgress(progress);
150+
}
138151
return null;
139152
}
140153

141-
void _onMessageSuccess(Map<String, dynamic> map) {
154+
Future<void>? _onMessageSuccess(Map map) {
142155
EMMessage msg = EMMessage.fromJson(map['message']);
143156
this._msgId = msg.msgId;
144157
this.status = msg.status;
145158
this.body = msg.body;
146-
listener?.onSuccess();
147-
EMLog.v('发送成功 -- ' + this.toString());
159+
if (listener != null) {
160+
listener!.onSuccess();
161+
}
162+
148163
return null;
149164
}
150165

151-
void _onMessageReadAck(Map<String, dynamic> map) {
152-
EMLog.v('消息已读 -- ' + ' msg_id: ' + this.msgId!);
166+
Future<void>? _onMessageReadAck(Map<String, dynamic> map) {
153167
EMMessage msg = EMMessage.fromJson(map);
154168
this.hasReadAck = msg.hasReadAck;
155-
listener?.onReadAck();
156169

170+
if (listener != null) {
171+
listener!.onReadAck();
172+
}
157173
return null;
158174
}
159175

160-
void _onMessageDeliveryAck(Map<String, dynamic> map) {
176+
Future<void>? _onMessageDeliveryAck(Map<String, dynamic> map) {
161177
EMMessage msg = EMMessage.fromJson(map);
162178
this.hasDeliverAck = msg.hasDeliverAck;
163-
listener?.onDeliveryAck();
179+
180+
if (listener != null) {
181+
listener!.onDeliveryAck();
182+
}
164183
return null;
165184
}
166185

167-
void _onMessageStatusChanged(Map<String, dynamic> map) {
186+
Future<void>? _onMessageStatusChanged(Map<String, dynamic> map) {
168187
EMMessage msg = EMMessage.fromJson(map);
169188
this.status = msg.status;
170-
listener?.onStatusChanged();
189+
190+
if (listener != null) {
191+
listener!.onStatusChanged();
192+
}
171193
return null;
172194
}
173195

@@ -279,10 +301,13 @@ class EMMessage {
279301

280302
void setMessageListener(EMMessageStatusListener? listener) {
281303
this.listener = listener;
304+
if (listener != null) {
305+
MessageCallBackManager.getInstance.addMessage(this);
306+
} else {
307+
MessageCallBackManager.getInstance.removeMessage(this);
308+
}
282309
}
283310

284-
late String _tmpKey;
285-
286311
/// 消息id
287312
String? _msgId,
288313
msgLocalId = DateTime.now().millisecondsSinceEpoch.toString() +

0 commit comments

Comments
 (0)