📖 稍后读会话 + ChatFlowPage 增强 — 开发文档
版本: v13.0.0
创建时间: 2026-05-15
状态: 🚧 开发中
优先级: P1 (高)
负责模块: inspiration / home / core
一、功能概述
1.1 核心需求
- 稍后读会话 — 在工作流(InspirationPage)会话列表中新增"稍后读"内置会话,采用聊天对话风格,类似微信"文件传输助手"
- 句子详情 → 稍后读 — 主页句子详情Sheet的"稍后读"按钮,点击后将句子信息发送到稍后读会话
- 系统分享接收 — 用户在其他App中通过系统分享面板选择"闲言",内容自动进入稍后读会话
- ChatFlowPage 增强 — 丰富会话流页面,新增链接预览/文档卡片/句子卡片等气泡样式,所有会话受益
- 稍后读设置 — 稍后读页面AppBar右侧设置按钮,管理稍后读相关配置
1.2 设计原则
- 复用现有
ChatFlowPage 聊天框架,通过 ChatSessionType.readlater 区分特殊逻辑
- 新增气泡组件对所有会话类型可用,不限于稍后读
- 系统分享接收使用
receive_sharing_intent 本地包,跨平台兼容
- 遵循 iOS 26 风格,使用项目统一设计令牌
二、架构设计
2.1 整体数据流
2.2 模块依赖关系
三、数据模型扩展
3.1 ChatMessageType 新增枚举
| 枚举值 |
id |
label |
emoji |
说明 |
link |
'link' |
链接消息 |
🔗 |
URL + OG预览卡片 |
document |
'document' |
文档消息 |
📄 |
PDF/Word/Excel等文档卡片 |
readlaterSentence |
'readlater_sentence' |
稍后读句子 |
💬 |
从句子详情收藏的句子卡片 |
文件: lib/features/inspiration/models/chat_message.dart
3.2 ChatSessionType 新增枚举
| 枚举值 |
id |
label |
readlater |
'readlater' |
稍后读 |
文件: lib/features/inspiration/models/chat_session.dart
3.3 ChatMessage.meta 字段约定
链接消息 (type=link)
文档消息 (type=document)
稍后读句子 (type=readlaterSentence)
四、UI设计
4.1 稍后读会话入口
在 InspirationPage 会话列表中,"稍后读"作为置顶内置会话显示:
4.2 稍后读聊天页面
4.3 新增气泡组件设计
ChatLinkBubble — 链接预览卡片
- 毛玻璃卡片背景,accent色左边框
- OG元数据: title / description / imageUrl 从
meta 读取
- 图片使用
CachedNetworkImage,无图时显示域名首字母头像
- 操作按钮: 打开链接(url_launcher) + 复制链接(Clipboard)
ChatDocumentBubble — 文档卡片
- 左侧大emoji图标(按类型: PDF📕/Word📘/Excel📗/PPT📙/ZIP📦/TXT📝/其他📄)
- 右侧文件名+大小+类型+日期
- 操作按钮: 打开文件 + 分享文件
ChatSentenceCardBubble — 句子卡片
- 渐变背景(按feedType分类着色,复用现有
_gradientColors逻辑)
- 白色文字,shimmer动画
- 底部统计栏 + 操作按钮
- 点击跳转句子详情Sheet
4.4 稍后读设置面板
点击AppBar右侧⚙️图标,弹出CupertinoActionSheet:
| 选项 |
图标 |
说明 |
| 稍后读列表 |
📋 |
跳转原ReadLaterPage(服务端API版本) |
| 标记全部已读 |
✅ |
将所有未读消息标记为已读 |
| 清空稍后读 |
🗑️ |
二次确认后清空所有消息(红色警告) |
| 导出内容 |
📤 |
导出为JSON/Markdown |
| 统计信息 |
📊 |
显示总数/已读/未读/按类型统计 |
| 分享接收 |
🔗 |
系统分享接收开关 |
| 取消 |
— |
关闭面板 |
4.5 ChatFlowPage 动态配置
| 配置项 |
普通会话(chat) |
稍后读会话(readlater) |
| AppBar标题 |
💬 会话流 |
📖 稍后读 |
| 分类栏 |
显示(7个分类) |
隐藏 |
| 新建会话按钮 |
显示 |
隐藏 |
| 设置按钮 |
会话设置页 |
稍后读设置面板 |
| 输入框placeholder |
"说点什么..." |
"添加链接/文字..." |
| 空消息提示 |
"开始你的灵感之旅 ✨" |
"收藏内容,稍后阅读 📖" |
| 附件按钮 |
显示(8种类型) |
显示(8种类型) |
| 回复功能 |
支持 |
支持 |
| 推送功能 |
支持 |
不支持(稍后读无推送) |
五、系统分享接收
5.1 第三方库
- 库名:
receive_sharing_intent
- 版本:
^1.8.1
- 引用方式: 本地包
packages/receive_sharing_intent/
- 跨平台: Android ✅ / iOS ✅ / Web ⚠️(URL参数) / Windows ⚠️(命令行参数)
5.2 Android 配置
文件: android/app/src/main/AndroidManifest.xml
在主Activity中新增intent-filter:
5.3 iOS 配置
文件: ios/Runner/Info.plist
新增URL Scheme和App Group配置,支持ShareExtension。
5.4 SharingReceiverService
文件: lib/core/services/sharing_receiver_service.dart
5.5 分享数据处理逻辑
| 分享类型 |
判断条件 |
处理方式 |
| 纯文本 |
无URL |
sendText(conversationId: 'readlater') |
| 链接 |
含http/https URL |
sendLink(conversationId: 'readlater') + OG元数据 |
| 图片 |
mimeType=image/* |
sendImage(conversationId: 'readlater') |
| 视频 |
mimeType=video/* |
sendVideo(conversationId: 'readlater') |
| 文档 |
mimeType=application/* |
sendDocument(conversationId: 'readlater') |
| 多文件 |
SEND_MULTIPLE |
逐个处理,批量写入 |
六、稍后读按钮 → 稍后读会话 数据流
6.1 现有流程
6.2 增强流程
6.3 取消稍后读
取消稍后读时,不删除稍后读会话中的消息(保留历史记录),仅在句子卡片上显示"已移出稍后读"状态标记。
七、文件结构变更
7.1 新增文件
| 文件路径 |
说明 |
lib/core/services/sharing_receiver_service.dart |
统一分享接收服务 |
lib/features/inspiration/presentation/widgets/chat_link_bubble.dart |
链接预览卡片气泡 |
lib/features/inspiration/presentation/widgets/chat_document_bubble.dart |
文档卡片气泡 |
lib/features/inspiration/presentation/widgets/chat_sentence_card_bubble.dart |
句子卡片气泡 |
packages/receive_sharing_intent/ |
本地包: 分享接收库 |
7.2 修改文件
| 文件路径 |
修改内容 |
lib/features/inspiration/models/chat_message.dart |
ChatMessageType新增link/document/readlaterSentence |
lib/features/inspiration/models/chat_session.dart |
ChatSessionType新增readlater |
lib/features/inspiration/presentation/chat_flow_page.dart |
动态标题/配置/新气泡分发/稍后读设置 |
lib/features/inspiration/presentation/widgets/chat_bubble.dart |
新消息类型分发逻辑 |
lib/features/inspiration/providers/chat_session_provider.dart |
新增readlater内置会话 |
lib/features/inspiration/providers/chat_provider.dart |
稍后读会话消息管理 |
lib/features/inspiration/services/chat_message_service.dart |
新增sendLink/sendDocument/sendReadLaterSentence |
lib/features/home/providers/home_interaction_mixin.dart |
toggleReadLater增加写入稍后读会话逻辑 |
lib/features/inspiration/presentation/inspiration_page.dart |
_onSessionTap新增readlater路由分发 |
lib/core/router/app_router.dart |
新增/readlater-chat路由 |
android/app/src/main/AndroidManifest.xml |
新增分享接收intent-filter |
ios/Runner/Info.plist |
新增URL Scheme/App Group |
pubspec.yaml |
新增receive_sharing_intent本地包依赖 |
lib/main.dart |
初始化SharingReceiverService |
CHANGELOG.md |
版本更新日志 |
八、开发归档清单
状态说明: ☐ 未开始 | 🚧 进行中 | ✅ 已完成 | ⚠️ 需修复 | ❌ 已取消
Phase 1: 数据模型扩展
| # |
任务 |
文件 |
状态 |
备注 |
| 1.1 |
ChatMessageType新增link/document/readlaterSentence |
chat_message.dart |
✅ |
含isLink/isDocument/isReadlaterSentence计算属性 |
| 1.2 |
ChatSessionType新增readlater |
chat_session.dart |
✅ |
|
| 1.3 |
ChatMessage.meta字段约定文档 |
本文档第三节 |
✅ |
|
| 1.4 |
Drift数据库迁移(如需新字段) |
app_database.dart |
✅ |
现有表结构兼容,无需迁移 |
Phase 2: 内置会话注册
| # |
任务 |
文件 |
状态 |
备注 |
| 2.1 |
_buildSessions()新增readlater内置会话 |
chat_session_provider.dart |
✅ |
默认置顶,HOT标签 |
| 2.2 |
_onSessionTap新增readlater路由分发 |
inspiration_page.dart |
✅ |
|
| 2.3 |
AppRoutes新增readlaterChat常量 |
app_router.dart |
✅ |
|
| 2.4 |
GoRoute新增/readlater-chat路由 |
app_router.dart |
✅ |
传入sessionType参数 |
Phase 3: ChatFlowPage 增强
| # |
任务 |
文件 |
状态 |
备注 |
| 3.1 |
ChatFlowPage接收sessionType参数 |
chat_flow_page.dart |
✅ |
含isReadlater计算属性 |
| 3.2 |
动态标题/配置(按sessionType) |
chat_flow_page.dart |
✅ |
标题/placeholder/previousPageTitle |
| 3.3 |
稍后读空消息提示UI |
chat_flow_page.dart |
✅ |
"收藏内容,稍后阅读 📖" |
| 3.4 |
稍后读设置面板(ActionSheet) |
chat_flow_page.dart |
✅ |
含标记已读/清空/导出/统计 |
| 3.5 |
隐藏分类栏(稍后读模式) |
chat_flow_page.dart |
✅ |
|
| 3.6 |
隐藏新建会话按钮(稍后读模式) |
chat_flow_page.dart |
✅ |
替换为设置按钮 |
Phase 4: 新增气泡组件
| # |
任务 |
文件 |
状态 |
备注 |
| 4.1 |
ChatLinkBubble — 链接预览卡片 |
chat_link_bubble.dart |
✅ |
OG预览+打开/复制按钮 |
| 4.2 |
ChatDocumentBubble — 文档卡片 |
chat_document_bubble.dart |
✅ |
按类型emoji+打开/分享 |
| 4.3 |
ChatSentenceCardBubble — 句子卡片 |
chat_sentence_card_bubble.dart |
✅ |
渐变背景+统计+shimmer |
| 4.4 |
ChatBubble新增消息类型分发 |
chat_bubble.dart |
✅ |
link/document/readlaterSentence |
| 4.5 |
用户气泡支持新类型渲染 |
chat_bubble.dart |
✅ |
|
| 4.6 |
AI气泡支持新类型渲染 |
chat_bubble.dart |
✅ |
|
Phase 5: ChatMessageService 扩展
| # |
任务 |
文件 |
状态 |
备注 |
| 5.1 |
sendLink()方法 |
chat_message_service.dart |
✅ |
type=link, meta含url/title/description |
| 5.2 |
sendDocument()方法 |
chat_message_service.dart |
✅ |
type=document, 含_documentTypeFromMime |
| 5.3 |
sendReadLaterSentence()方法 |
chat_message_service.dart |
✅ |
type=readlaterSentence, meta含句子详情 |
| 5.4 |
ChatNotifier新增对应发送方法 |
chat_provider.dart |
✅ |
sendLinkMessage/sendDocumentMessage/sendReadLaterSentenceMessage |
Phase 6: 稍后读按钮 → 稍后读会话
| # |
任务 |
文件 |
状态 |
备注 |
| 6.1 |
toggleReadLater增加写入稍后读会话 |
home_interaction_mixin.dart |
✅ |
仅标记时写入,取消时不删除 |
| 6.2 |
更新会话列表最后消息/时间 |
chat_session_provider.dart |
✅ |
refreshFromChat已支持readlater |
| 6.3 |
稍后读会话未读数更新 |
chat_session_provider.dart |
✅ |
|
| 6.4 |
句子卡片气泡点击跳转详情Sheet |
chat_sentence_card_bubble.dart |
✅ |
onTapSentence回调+GestureDetector+分享 |
Phase 7: 系统分享接收
| # |
任务 |
文件 |
状态 |
备注 |
| 7.1 |
下载receive_sharing_intent到本地packages/ |
packages/receive_sharing_intent/ |
✅ |
v1.8.1,从pub缓存复制 |
| 7.2 |
pubspec.yaml新增本地包依赖 |
pubspec.yaml |
✅ |
path: packages/receive_sharing_intent |
| 7.3 |
SharingReceiverService实现 |
sharing_receiver_service.dart |
✅ |
统一入口,单例模式 |
| 7.4 |
Android Manifest新增intent-filter |
AndroidManifest.xml |
✅ |
5个intent-filter |
| 7.5 |
iOS Info.plist配置 |
Info.plist |
✅ |
URL Scheme(xianyan://) + App Group |
| 7.6 |
main.dart初始化SharingReceiverService |
main.dart |
✅ |
含setNavigatorKey |
| 7.7 |
Web端兼容(URL参数) |
sharing_receiver_service.dart |
✅ |
条件编译 |
| 7.8 |
Windows端兼容(命令行参数) |
sharing_receiver_service.dart |
✅ |
条件编译 |
| 7.9 |
分享数据→稍后读会话写入 |
sharing_receiver_service.dart |
✅ |
文本/链接/图片/视频/文档 |
| 7.10 |
App从后台被分享唤起时的路由跳转 |
sharing_receiver_service.dart |
✅ |
_navigateToReadlater+rootNavigatorKey |
Phase 8: 测试与验收
| # |
任务 |
范围 |
状态 |
备注 |
| 8.1 |
句子详情→稍后读→会话显示 |
端到端 |
☐ |
|
| 8.2 |
取消稍后读→会话保留历史 |
端到端 |
☐ |
|
| 8.3 |
手动发送文本/链接到稍后读 |
端到端 |
☐ |
|
| 8.4 |
手动发送图片/视频/文件到稍后读 |
端到端 |
☐ |
|
| 8.5 |
系统分享文本→稍后读会话 |
Android+iOS |
☐ |
|
| 8.6 |
系统分享图片→稍后读会话 |
Android+iOS |
☐ |
|
| 8.7 |
系统分享文件→稍后读会话 |
Android+iOS |
☐ |
|
| 8.8 |
链接预览卡片渲染 |
UI |
☐ |
有OG图/无OG图 |
| 8.9 |
文档卡片渲染 |
UI |
☐ |
PDF/Word/Excel/ZIP |
| 8.10 |
句子卡片渲染 |
UI |
☐ |
渐变背景+统计+操作 |
| 8.11 |
稍后读设置面板功能 |
UI |
☐ |
全部已读/清空/导出/统计 |
| 8.12 |
普通会话也能使用新气泡 |
回归测试 |
☐ |
link/document在普通会话也可用 |
| 8.13 |
空指针检测 |
稳定性 |
☐ |
所有新增页面/组件 |
| 8.14 |
动态主题适配 |
UI |
☐ |
日间/夜间/纯黑模式 |
| 8.15 |
Web/Windows端兼容 |
跨平台 |
☐ |
分享接收降级处理 |
九、验收标准
9.1 功能验收
9.2 UI验收
9.3 稳定性验收
十、风险与注意事项
| 风险 |
影响 |
缓解措施 |
| receive_sharing_intent库在Web/Windows不支持 |
分享接收降级 |
条件编译,Web用URL参数,Windows用命令行参数 |
| Drift数据库迁移可能影响现有数据 |
数据丢失 |
新增字段使用默认值,不删除现有列 |
| OG元数据获取需要网络请求 |
链接预览延迟 |
异步加载,先显示URL,OG数据加载后更新 |
| 大文件分享可能导致内存问题 |
OOM |
限制单文件大小,大文件分片处理 |
| 稍后读会话消息量过大 |
性能下降 |
分页加载,虚拟列表 |
十一、版本记录
| 版本 |
日期 |
变更 |
| v1.0 |
2026-05-15 |
初始设计文档 |
| v1.1 |
2026-05-15 |
Phase 1-7 实现完成,编译通过(0 error),3项待后续补充(⚠️) |
| v1.2 |
2026-05-15 |
全部归档清单✅完成,新增可扩展功能分析 |
十二、稍后读可扩展功能分析
基于项目现有依赖库(pubspec.yaml)和已实现功能,分析稍后读会话可扩展的功能方向
12.1 基于现有库的可扩展功能
| # |
功能 |
依赖库 |
优先级 |
说明 |
| E1 |
🔗 链接OG元数据自动抓取 |
dio + flutter_html |
P1 |
收到链接消息时,异步抓取OG标题/描述/图片,更新meta字段 |
| E2 |
📄 文档预览 |
flutter_html + file_picker |
P2 |
文档卡片点击后,PDF用flutter_html渲染,Word/Excel转PDF预览 |
| E3 |
🖼️ 图片编辑后保存 |
pro_image_editor + image |
P2 |
图片消息长按可进入编辑器,裁剪/标注后覆盖保存 |
| E4 |
🎬 视频压缩后保存 |
video_compress + gal |
P2 |
视频消息长按可压缩后保存到相册 |
| E5 |
📤 多格式导出 |
archive + share_plus + gal |
P1 |
稍后读内容批量导出为ZIP/Markdown/JSON/图片 |
| E6 |
🔔 稍后读提醒 |
flutter_local_notifications |
P1 |
定时提醒未读稍后读内容,支持自定义提醒时间 |
| E7 |
📊 阅读统计 |
fl_chart |
P2 |
稍后读统计面板:按类型/日期/来源的阅读数据可视化 |
| E8 |
🔍 全文搜索 |
Drift LIKE / FTS5 |
P1 |
稍后读会话内搜索,支持文本/链接/文件名搜索 |
| E9 |
🏷️ 标签/分类管理 |
hive + 现有分类系统 |
P2 |
给稍后读内容打标签,按标签筛选 |
| E10 |
📋 剪贴板监控 |
flutter_secure_storage + 后台服务 |
P3 |
自动检测剪贴板中的链接,提示保存到稍后读 |
| E11 |
🔄 离线同步 |
supabase_flutter + Drift |
P2 |
稍后读内容云端同步,多设备共享 |
| E12 |
🎨 句子卡片制作 |
pro_image_editor + cached_network_image |
P2 |
句子卡片气泡长按可制作壁纸/分享图 |
| E13 |
📱 桌面小组件 |
home_widget(需新增) |
P3 |
iOS/Android桌面Widget显示未读稍后读数量 |
| E14 |
🗂️ 文件夹管理 |
Drift + 现有会话系统 |
P3 |
稍后读内容按文件夹分组管理 |
| E15 |
🤖 AI摘要 |
supabase_flutter(Edge Functions) |
P3 |
对长文本/链接内容自动生成AI摘要 |
12.2 基于现有文件传输模块的可扩展功能
| # |
功能 |
依赖模块 |
优先级 |
说明 |
| E16 |
📡 跨设备稍后读同步 |
file_transfer + nearby_service |
P2 |
通过局域网将稍后读内容推送到其他设备 |
| E17 |
💬 稍后读协作 |
TransferChatPage + SignalingService |
P3 |
与好友共享稍后读列表,互相推荐内容 |
12.3 推荐实施顺序
第一批 (P1):
- E1 链接OG元数据抓取 — 提升链接消息体验
- E5 多格式导出 — 实用性强
- E6 稍后读提醒 — 核心体验
- E8 全文搜索 — 内容管理必需
第二批 (P2):
- E2 文档预览 / E4 视频压缩 / E7 阅读统计 / E9 标签管理 / E11 离线同步 / E12 句子卡片制作 / E16 跨设备同步
第三批 (P3):
- E10 剪贴板监控 / E13 桌面小组件 / E14 文件夹管理 / E15 AI摘要 / E17 稍后读协作