restoreEditingDraft method
页面消息加载完成后恢复服务端保存的编辑草稿。
Implementation
Future<void> restoreEditingDraft(RCKChatProvider chatProvider) async {
if (_disposed || isEditing) return;
final operationId = ++_editOperationId;
final settingsReady = await chatProvider.waitForMessageEditSettings();
if (_disposed || operationId != _editOperationId || !settingsReady) return;
final draft = await chatProvider.getEditedMessageDraft();
if (_disposed || operationId != _editOperationId || draft == null) return;
final messageUId = draft.messageUId;
final decodedDraft = _decodeEditedDraftContent(draft.content);
final content = decodedDraft.content;
if (messageUId == null ||
messageUId.isEmpty ||
content == null ||
content.isEmpty) {
return;
}
RCIMIWMessage? message = chatProvider.messageByUId(messageUId);
var shouldClearDraft =
message != null && !chatProvider.canEditMessage(message);
if (message == null) {
final resolution =
await chatProvider.resolveEditedDraftMessage(messageUId);
message = resolution.message;
shouldClearDraft = resolution.shouldClearDraft;
}
if (_disposed || operationId != _editOperationId) return;
if (message == null || !chatProvider.canEditMessage(message)) {
if (shouldClearDraft || message != null) {
await chatProvider.clearEditedMessageDraft();
}
return;
}
await _startEditing(
message,
chatProvider,
restoredContent: content,
restoredMentionUserIds: decodedDraft.mentionUserIds,
restoredMentions: decodedDraft.mentions,
restoredReferenceStatus: decodedDraft.referenceStatus,
restoredReferenceContent: decodedDraft.referenceContent,
);
}