MessageManager class

消息管理器,仿照 OpenIM MessageManager。

历史:拉后端 → 写缓存(不广播)→ 查缓存 → UI merge。 首屏与上拉同一套 getHistoryMessageList,只差 cursor。 发送:先写本地 sending → WS ACK → 更新本地 success

Constructors

MessageManager(ConversationManager _conversationManager)

Properties

advancedMsgListener → OnAdvancedMsgListener?
no setter
canSend → bool
是否当前可发送(UI 可用此禁用发送按钮)
no setter
hashCode → int
The hash code for this object.
no setterinherited
mediaPolicy → MediaPolicy
no setter
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited

Methods

assertCanSend() → void
发送前置检查:无网 / WS 未连接时立即失败(不等待 ACK 超时)
bindWsEvents() → void
由 IMManager 在 login 后绑定 WS 事件
createCardMessage({required int talkMode, required int toFromId, required int userId}) → Message
createCodeMessage({required int talkMode, required int toFromId, required String code, required String lang}) → Message
createFileMessage({required int talkMode, required int toFromId, required String uploadId}) → Message
大文件消息:分片上传完成后,WS body 仅带 uploadId(对齐 Web)。
createImageMessage({required int talkMode, required int toFromId, required String url, required int width, required int height, required int size, String? name}) → Message
createLocationMessage({required int talkMode, required int toFromId, required double latitude, required double longitude, String description = ''}) → Message
createMiniProgramMessage({required int talkMode, required int toFromId, required String content, String? toolName, bool flashRead = false, String? quoteMsgId}) → Message
创建小程序消息(msg_type=14)。flashRead 为 true 时服务端按闪阅处理(需 flash_read.auto_recall_seconds>0);也可在 content JSON 中带 openType=browser。
createTextMessage({required int talkMode, required int toFromId, required String content, List<int>? mentions, String? quoteMsgId}) → Message
createVideoMessage({required int talkMode, required int toFromId, required String url, required String cover, required int duration, required int size}) → Message
createVoiceMessage({required int talkMode, required int toFromId, required String url, required int duration, required int size}) → Message
deleteMessageFromLocalAndSvr({required int talkMode, required int toFromId, required List<String> msgIds}) → Future<void>
fetchPeerReadState({required int talkMode, required int toFromId}) → Future<MessageRead?>
回填对端已读水位(打开私聊时调用)。
getHistoryMessageList({required int talkMode, required int toFromId, String cursor = '0', int count = 10, bool reportRead = false}) → Future<MessageListResult>
统一历史入口(cache-first):
getHistoryMessageListByType({required int talkMode, required int toFromId, required int msgType, String cursor = '0', int count = 100}) → Future<MessageListResult>
按类型过滤历史(HTTP → 写库);仍建议 UI 随后从本地读。
getPendingMessages({required int talkMode, required int toFromId}) → Future<List<Message>>
查询本地发送中 / 失败消息
markMessagesAsRead({required int talkMode, required int toFromId, required String msgId}) → Future<void>
上报私聊已读水位(本端 inbox 的 msgId)。仅 TalkMode.private。
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
peerReadSeq({required int talkMode, required int toFromId}) → int
resendMessage(Message message, {Duration? timeout}) → Future<Message>
重试本地 failed / sending 消息
resendPendingMessages({required int talkMode, required int toFromId}) → Future<void>
批量重试本会话 pending
resolveDisplayMediaUrl(Message msg) → String?
按策略解析展示用媒体 URL(蜂窝优先缩略图)
revokeMessage({required int talkMode, required int toFromId, required String msgId}) → Future<void>
sendMessage(Message message, {Duration? timeout}) → Future<Message>
通过 WebSocket 发送消息,等待服务端 ACK。 发送前写入本地(status=发送中),成功后标记 status=0。
setAdvancedMsgListener(OnAdvancedMsgListener listener) → void
shouldAutoDownload(Message msg) → bool
是否应按当前流量策略自动下载该消息媒体
toString() → String
A string representation of this object.
inherited
typing(int toFromId) → Future<void>
发送「正在输入」
unbindWsEvents() → void
uploadImageHints({bool preferOriginal = false}) → ({bool compress, int jpegQuality, MediaQuality quality})
当前网络建议的图片上传质量 / JPEG 压缩参数

Operators

operator ==(Object other) → bool
The equality operator.
inherited