Skip to content

feat: 关于实现完整的聊天模块:支持单聊 & 群聊,支持图片/文件发送 #3

@dennis9486

Description

@dennis9486

标题

在 Flutter 客户端实现完整的聊天模块:支持单聊 & 群聊,支持图片/文件发送

简述

为 Flutter 客户端实现一个可用、稳定的聊天模块,支持单聊与群聊场景;消息类型至少包含:文本、图片、文件。包括消息发送/接收、上传/下载、离线/重试、消息列表、查看大图/下载附件、消息状态(发送中/已发送/已送达/已读)等功能。


目标

  • 支持单聊(1:1)与群聊(多用户)基本功能。
  • 支持发送与接收:文本、图片(含缩略图)、文件(任意类型)。
  • 支持消息状态、离线缓存、断点续传/重试和进度展示。
  • 用户体验要流畅:图片压缩、预览、占位、发送占位符、失败重发。
  • 与后端协议兼容(WS+REST 上传/下载或指定接口),并满足基本安全策略(鉴权、签名/短期 URL)。

功能需求(核心)

  • 会话列表:显示最近会话、未读计数、最后一条消息预览。
  • 聊天界面:
    • 文本输入(支持换行、表情/@群成员可选)。
    • 发送/接收文本消息。
    • 选择/拍照并发送图片:显示缩略图、上传进度、大图预览,可保存到相册。
    • 发送文件(任意类型):显示文件名、大小、上传/下载进度、打开/保存文件。
    • 消息气泡显示时间、发送者(群聊)、消息状态(正在发送/失败/已发送/已读)。
    • 长按消息可复制/删除/转发/重发/下载附件。
  • 附件处理:
    • 本地压缩图片(可配置压缩质量/尺寸)。
    • 上传前生成缩略图并先展示本地占位图,上传完成替换为服务器 URL。
    • 大文件支持分片上传或断点续传(后端支持时启用)。
  • 离线与重试:
    • 发送队列:网络不可用时队列化并在重新连上后自动重试(指数退避)。
    • 本地持久化消息(SQLite / sembast / hive),打开会话加载历史并合并服务端数据。
  • 实时同步:
    • 优先使用 WebSocket(或其它长连接)接收推送,支持消息回执(ack、delivery、read)。
    • 支持拉取历史(分页)与消息去重(messageId 去重)。
  • 权限/安全:
    • 所有上传/下载需要有效鉴权(JWT / signed URL)。
    • 附件 URL 为短期有效或需要后端鉴权转发下载。
  • 国际化(i18n)与无障碍(可选)。

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

Projects

Status

Todo

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions