resolveEditedDraftMessage method
Future<({RCIMIWMessage? message, bool shouldClearDraft})>
resolveEditedDraftMessage(
- String messageUId
恢复编辑草稿时静默查询未加载到首屏的原消息。
查询结果只进入编辑源缓存,不插入消息列表,避免破坏当前分页与排序。
Implementation
Future<({RCIMIWMessage? message, bool shouldClearDraft})>
resolveEditedDraftMessage(String messageUId) async {
if (_disposed ||
_sessionInvalid ||
!_isSessionCurrent() ||
messageUId.isEmpty) {
return (message: null, shouldClearDraft: false);
}
final localMessage = messageByUId(messageUId);
if (localMessage != null) {
final editable = canEditMessage(localMessage);
return (
message: editable ? localMessage : null,
shouldClearDraft: !editable,
);
}
final result = await _getMessageByUId(messageUId);
if (result == null || result.code != 0) {
return (message: null, shouldClearDraft: false);
}
final message = result.message;
if (message == null) {
return (message: null, shouldClearDraft: true);
}
if (message is RCIMIWRecallNotificationMessage) {
return (message: null, shouldClearDraft: true);
}
if (message.conversationType != _con.conversationType ||
message.targetId != _con.targetId ||
!_sameChannelId(message.channelId, _con.channelId) ||
!canEditMessage(message)) {
return (message: null, shouldClearDraft: true);
}
_cacheMessageEditSource(message);
return (message: message, shouldClearDraft: false);
}