## 主要变更 1. 修复8个空壳服务UI集成:标签/文件夹/同步/AI摘要/协作/跨设备/小组件/剪贴板监控服务 2. 替换DailyTaskPage/TaskCard硬编码颜色为AppTheme设计令牌 3. 将ReadlaterReminderService从SharedPreferences迁移至AppKVStore 4. 为ChatMessageService新增updateExt方法,实现标签自动同步 5. 替换同步I/O为异步文件操作 6. 更新CHANGELOG与新增自动化验收测试脚本
51 KiB
Changelog
所有重要变更均记录于此文件。格式基于 Keep a Changelog。
[5.8.0] - 2026-05-15
🔍 验收审计 — 稍后读功能体系 + 传输扩展 + 每日任务 + 收藏同步
对CHANGELOG所列功能进行代码级验收审计,发现8个服务存在"空壳"问题(服务逻辑完整但无UI/Provider集成),已全部修复集成。自动化验证脚本15/15项通过。
🔍 审计报告
审计范围: E1~E17稍后读功能、每日任务系统、收藏同步重构、USB OTG传输、剪贴板同步管理、协作画布、云端暂存
审计方法: 逐文件检查服务→Provider→UI的引用链,验证功能可达性
| 功能 | 服务文件 | Provider集成 | UI集成 | 审计结果 |
|---|---|---|---|---|
| E1 OG元数据 | og_metadata_service.dart | ✅ chat_link_bubble | ✅ | 🟢 完整 |
| E2 文档预览 | document_preview_page.dart | ✅ | ✅ | 🟢 完整 |
| E4 视频压缩 | chat_video_bubble.dart | ✅ | ✅ | 🟢 完整 |
| E5 多格式导出 | chat_flow_readlater_mixin.dart | ✅ | ✅ | 🟢 完整 |
| E6 稍后读提醒 | readlater_reminder_service.dart | ✅ main.dart+通知设置 | ✅ | 🟢 完整 |
| E7 阅读统计 | readlater_stats_page.dart | ✅ | ✅ | 🟢 完整 |
| E8 全文搜索 | chat_provider.dart | ✅ | ✅ | 🟢 完整 |
| E9 标签管理 | readlater_tag_service.dart | ✅ →已修复 | ✅ →已修复 | 🟢→已修复 |
| E10 剪贴板监控 | clipboard_monitor_service.dart | ✅ →已修复 | ✅ →已修复 | 🟢→已修复 |
| E11 离线同步 | readlater_sync_service.dart | ✅ →已修复 | ✅ →已修复 | 🟢→已修复 |
| E12 句子卡片 | chat_sentence_card_bubble.dart | ✅ | ✅ | 🟢 完整 |
| E13 桌面小组件 | home_widget_service.dart | ✅ →已修复 | ✅ →已修复 | 🟢→已修复 |
| E14 文件夹管理 | readlater_folder_service.dart | ✅ →已修复 | ✅ →已修复 | 🟢→已修复 |
| E15 AI摘要 | readlater_ai_service.dart | ✅ →已修复 | ✅ →已修复 | 🟢→已修复 |
| E16 跨设备同步 | readlater_device_sync_service.dart | ✅ →已修复 | ✅ →已修复 | 🟢→已修复 |
| E17 稍后读协作 | readlater_collab_service.dart | ✅ →已修复 | ✅ →已修复 | 🟢→已修复 |
| 稍后读会话 | sharing_receiver_service.dart | ✅ main.dart | ✅ | 🟢 完整 |
| 每日任务 | task_service→task_provider | ✅ | ✅ daily_task_page | 🟢→已修复 |
| 收藏同步 | favorite_provider.dart | ✅ | ✅ | 🟢 完整 |
| USB OTG | usb_transport_service.dart | ✅ transfer_notifier | ✅ usb_confirm_dialog | 🟢 完整 |
| 剪贴板同步 | clipboard_manager_service | ✅ clipboard_provider | ✅ clipboard_flow_page | 🟢 完整 |
| 协作画布 | canvas_sync_service | ✅ canvas_provider | ✅ canvas_page | 🟢 完整 |
| 云端暂存 | cloud_cache_service | ✅ transfer_notifier | ✅ | 🟢 完整 |
已修复 — 8个空壳服务:
- ReadlaterTagService: ✅ 稍后读设置面板新增"🏷️ 管理标签"入口+消息长按"添加标签"
- ReadlaterFolderService: ✅ 稍后读设置面板新增"📁 管理文件夹"入口
- ReadlaterAiService: ✅ 消息长按菜单新增"🤖 AI摘要"+"🏷️ 智能标签"
- ReadlaterCollabService: ✅ 稍后读设置面板新增"👥 共享协作"入口
- ReadlaterDeviceSyncService: ✅ 稍后读设置面板新增"📱 跨设备同步"入口
- ReadlaterSyncService: ✅ 稍后读设置面板新增"☁️ 云端同步"入口
- HomeWidgetService: ✅ 稍后读设置面板新增"🏠 更新桌面小组件"+main.dart初始化
- ClipboardMonitorService: ✅ 稍后读设置面板新增"📋 剪贴板监控"+main.dart初始化
已修复 — 其他问题:
- DailyTaskPage/TaskCard: ✅ 替换硬编码CupertinoColors为AppTheme.ext(context)设计令牌
- ReadlaterReminderService: ✅ SharedPreferences替换为AppKVStore统一存储
- exportAsZip: ✅ 同步I/O改为异步(await writeAsString/readAsBytes)
- ChatMessage标签同步: ✅ ReadlaterTagService.addTag/removeTag/setTagsForMessage自动同步到ext['tags']
- ChatMessageService: ✅ 新增updateExt()方法支持ext字段更新
🔧 修复清单
-
ReadlaterTagService UI集成 — chat_flow_readlater_mixin.dart
- showSettings新增"🏷️ 管理标签"操作
- 新增showTagManager弹窗: 标签列表/添加/删除/按标签筛选
- 消息长按菜单新增"添加标签"选项
- addTag/removeTag/setTagsForMessage自动同步ChatMessage.ext['tags']
-
ReadlaterFolderService UI集成 — chat_flow_readlater_mixin.dart
- showSettings新增"📁 管理文件夹"操作
- 新增showFolderManager弹窗: 文件夹列表/创建/重命名/删除/消息归档
-
ReadlaterSyncService UI集成 — chat_flow_readlater_mixin.dart
- showSettings新增"☁️ 云端同步"操作
- 同步进度提示+结果反馈
-
ReadlaterAiService UI集成 — chat_flow_readlater_mixin.dart
- "🤖 AI摘要" — 生成单条消息摘要
- "🏷️ 智能标签" — AI推荐标签
-
HomeWidgetService UI集成 — chat_flow_readlater_mixin.dart + main.dart
- 稍后读设置面板新增"🏠 更新桌面小组件"操作
- 更新稍后读未读数+预览内容到桌面小组件
- main.dart新增HomeWidgetService.instance.init()初始化
-
ClipboardMonitorService UI集成 — chat_flow_readlater_mixin.dart + main.dart
- 稍后读设置面板新增"📋 剪贴板监控"操作
- 开启/关闭监控+查看剪贴板内容
- main.dart新增ClipboardMonitorService.instance.initFromStore()初始化
-
ReadlaterCollabService UI集成 — chat_flow_readlater_mixin.dart
- showSettings新增"👥 共享协作"操作
-
ReadlaterDeviceSyncService UI集成 — chat_flow_readlater_mixin.dart
- showSettings新增"📱 跨设备同步"操作
-
DailyTaskPage/TaskCard — 替换硬编码CupertinoColors为AppTheme.ext(context)设计令牌
- bgCard/bgSecondary/bgElevated/textPrimary/textSecondary/successColor/infoColor/warningColor/errorColor
-
exportAsZip — 同步I/O改为异步(await writeAsString/readAsBytes)
-
ReadlaterReminderService — SharedPreferences替换为AppKVStore
- getBool/setBool/getString/setString全部迁移至AppKVStore
- isEnabled()从Future改为同步bool
-
ChatMessage标签同步 — ReadlaterTagService.addTag/removeTag/setTagsForMessage自动同步到ext['tags']
- 新增_syncTagsToMessageExt()私有方法
- ChatMessageService新增updateExt()方法
🧪 验证
- 自动化验证脚本: test/audit_v58_verify.dart (15/15项通过)
- 验证项: UI入口存在性、AppTheme替换完整性、AppKVStore替换完整性、异步I/O替换、服务初始化、标签同步
[12.25.0] - 2026-05-15
🔧 架构重构 — 目录整理 + home_widget本地化 + 代码拆分
代码架构优化:chat_flow_page拆分、inspiration/presentation目录整理、core/services分类归档、home_widget本地包更新至0.9.1
🔧 chat_flow_page.dart 拆分
- 原1526行拆分为7个文件,主文件373行
chat_flow_page.dart— State管理和build方法chat_flow_readlater_mixin.dart→ChatFlowReadlaterHelper静态辅助类chat_flow_conversation_mixin.dart→ChatFlowConversationHelper静态辅助类chat_flow_top_bar.dart— 搜索栏、分类栏、背景图、动态主题chat_flow_input_bar.dart— 输入栏、附件按钮、发送按钮chat_flow_message_list.dart— 消息列表展示、空状态占位chat_flow_send_toast.dart— 消息发送浮动提示
🔧 inspiration/presentation 目录整理
- 新增子目录:
pages/home/,pages/tool/,widgets/chat/,widgets/chat_bubble/,widgets/chat_input/,widgets/common/,widgets/tool/ - 每个文件夹不超过8个文件
- 所有import路径已修复
🔧 core/services 目录整理
- 原29个文件分类到6个子目录:
auth/(3): token_service, permission_service, validate_servicedata/(5): backup_service, data_export_service, settings_export_service, home_widget_service, jinrishici_sdk_servicedevice/(5): app_lock_service, battery_optimization_service, device_info_service, haptic_service, screen_wake_servicenetwork/(4): connectivity_service, deep_link_service, network_proxy_service, og_metadata_servicenotification/(4): local_notification_service, notification_scheduler, notification_service, readlater_reminder_servicereadlater/(5): readlater_ai_service, readlater_collab_service, readlater_device_sync_service, readlater_sync_service, sharing_receiver_service
- 根目录保留3个: smart_mode_service, sound_service, clipboard_monitor_service
- 所有import路径已修复
🔧 home_widget 本地包更新
- 从pub.dev下载home_widget 0.9.1版本到
packages/home_widget - pubspec.yaml引用改为本地路径:
path: packages/home_widget - 版本从0.7.0+1升级到0.9.1
[12.24.0] - 2026-05-15
✨ 新功能 — E10剪贴板监控 + E13桌面小组件 + E14文件夹管理 + E15AI摘要 + E17稍后读协作
稍后读功能体系扩展:剪贴板自动检测链接、桌面小组件数据推送、文件夹归档、AI智能摘要、好友共享协作
✨ E10 剪贴板链接监控服务
- 新增
ClipboardMonitorService(core/services/clipboard_monitor_service.dart)startMonitor()— 每3秒轮询剪贴板,检测URL链接stopMonitor()— 停止监控_isUrl()— 仅匹配http/https协议链接,隐私保护不保存非URL内容_saveToReadlater()— 自动保存到稍后读,显示📋提示setEnabled()/getEnabled()— 开关状态持久化(AppKVStore key: clipboard_monitor_enabled)initFromStore()— 应用启动时根据存储状态自动恢复监控
✨ E13 桌面小组件服务
- 新增
HomeWidgetService(core/services/home_widget_service.dart)init()— 初始化App Group (group.com.xianyan.share)updateReadlaterCount()— 更新稍后读未读数到小组件updateReadlaterPreview()— 更新最新稍后读内容预览(截断80字)updateDailySentence()— 更新每日一句到小组件handleWidgetClick()— 获取小组件点击数据registerInteractivityCallback()— 注册后台交互回调- Android/iOS WidgetId: XianyanReadlaterWidget
debugGetAllData()— 调试用,读取所有小组件数据
- pubspec.yaml 新增
home_widget: ^0.7.0依赖
✨ E14 稍后读文件夹管理
- 新增
ReadlaterFolderService(features/inspiration/services/readlater_folder_service.dart)getFolders()— 获取所有文件夹(自动同步消息计数)createFolder()— 创建文件夹(支持emoji图标)renameFolder()/deleteFolder()— 重命名/删除文件夹moveMessageToFolder()/removeMessageFromFolder()— 消息归档/移出getMessageIdsInFolder()/getMessageFolder()— 查询归档关系- 数据持久化: AppKVStore (key: readlater_folders + readlater_message_folder)
- 新增
ReadlaterFolder数据模型(id/name/emoji/count/createdAt/updatedAt)
✨ E15 AI摘要生成服务
- 新增
ReadlaterAiService(core/services/readlater_ai_service.dart)generateSummary()— 生成单条消息摘要batchSummarize()— 批量生成摘要generateDailySummary()— 生成每日摘要suggestTags()— 智能分类标签建议applySummary()/getSummary()— 摘要写入/读取消息ext['aiSummary']- Edge Function: generate-readlater-summary
- 请求参数: { content, type, action: 'summary'|'daily'|'tags' }
- 降级策略: AI不可用时返回null,不影响UI
✨ E17 稍后读协作服务
- 新增
ReadlaterCollabService(core/services/readlater_collab_service.dart)createSharedList()— 创建共享列表inviteMember()— 邀请好友加入shareToSharedList()— 分享消息到共享列表getSharedListMessages()— 获取共享列表消息getMySharedLists()— 获取我参与的共享列表leaveSharedList()— 退出共享列表subscribeToListChanges()/unsubscribeFromListChanges()— 实时订阅/取消- Supabase表: readlater_shared_lists, readlater_shared_members, readlater_shared_messages
- 实时订阅: supabase.realtime PostgresChanges
- 新增
SharedReadlaterList数据模型(id/name/ownerId/memberIds/messageCount/createdAt)
📝 文件变更
- 新增:
lib/core/services/clipboard_monitor_service.dart - 新增:
lib/core/services/home_widget_service.dart - 新增:
lib/features/inspiration/services/readlater_folder_service.dart - 新增:
lib/core/services/readlater_ai_service.dart - 新增:
lib/core/services/readlater_collab_service.dart - 修改:
pubspec.yaml— 新增 home_widget 依赖
[12.23.0] - 2026-05-15
🔧 服务端修复 — 信令协议3项问题修复 + API文档拆分
修复WebSocket信令服务器heartbeat/discover/ping无响应问题,API文档拆分为独立文档
🐛 服务端修复 — heartbeat无响应
- 根因:
server/index.js第119-121行,heartbeatcase 仅更新lastBeat,未回复heartbeat_ack - 修复: 添加
this._send(sender, { type: 'heartbeat_ack', timestamp: Date.now() })回复 - 影响: 客户端现在可以主动检测连接存活状态
🐛 服务端修复 — discover设备发现无响应
- 根因:
discover不在 switch case 和 handledTypes 中,无to字段被通用转发丢弃 - 修复: 新增
_handleDiscover方法,返回所有在线设备列表;添加discover到 handledTypes - 影响: 客户端可以主动请求刷新设备列表
🐛 服务端修复 — ping/pong无响应
- 根因: 客户端发送
ping不在 switch case 中,被通用转发丢弃 - 修复: 新增
pingcase,回复{ type: 'pong', timestamp }并更新lastBeat - 影响: 客户端可以主动测试连通性
🔧 服务端优化 — 注册响应顺序
- 根因:
_onConnection中display-name在registered之前发送 - 修复: 先发送
registered,再发送display-name
📄 文档拆分 — API_FILE_TRANSFER_DOC.md
- 原始合并文档已删除
- 拆分为
API_FILE_TRANSFER_CORE_DOC.md(文件传输核心API + WebSocket信令协议) - 拆分为
API_CLOUD_CACHE_DOC.md(云端暂存CloudCache API) - 新增
API_FILE_TRANSFER_ANALYSIS.md(问题与性能分析报告) - 新增
verify_file_transfer_api.py(全流程API验证脚本,28个测试用例)
✅ API验证结果
- REST API: 14/14 通过 (100%)
- WebSocket信令: 6/6 通过 (100%)
- 云端暂存: 8/8 通过 (100%)
- 总计: 28/28 通过 (100%)
🔧 客户端修复 — signaling_service.dart
- 新增
discoverResponse枚举和 case 处理 - 新增
heartbeatAck枚举和 case 处理,追踪_lastHeartbeatAck - 修复
pongcase,记录心跳响应时间 - 修复
displayNamecase,解析并存储服务器推送的设备名称
[12.22.0] - 2026-05-15
✨ 新功能 — E16跨设备稍后读同步 + 稍后读缓存管理集成
稍后读内容可通过文件传输助手同步到同账号设备,缓存管理页面新增稍后读统计和清理
✨ E16 跨设备稍后读同步
- 新增
ReadlaterDeviceSyncService(core/services/readlater_device_sync_service.dart)discoverDevices()— 发现同账号在线设备sendToDevice()— 将稍后读消息打包发送到指定设备sendAsFile()— 导出稍后读内容为文件并传输handleReceivedSyncData()— 处理接收到的稍后读同步数据scanAndImportPendingSyncFiles()— 扫描传输目录中未处理的同步文件
- 发送流程:序列化JSON → 保存临时文件
readlater_sync_{timestamp}.json→ 调用TransferNotifier.sendFileToMyDevice传输 - 接收流程:检测同步文件 → 解析JSON → 按消息类型(readlater_sentence/link/document/text)导入稍后读会话
- 复用现有文件传输模块能力(TransferNotifier/SignalingService)
✨ 稍后读缓存管理集成
CacheService新增方法:getReadlaterCacheSize()— 获取稍后读缓存大小(消息+附件+同步文件)cleanReadlaterCache()— 清理稍后读缓存(缩略图/附件/同步临时文件,保留消息记录)clearReadlaterData()— 清理全部稍后读数据(消息+附件+缩略图)
CacheStats新增readlaterSizeBytes字段和readlaterSizeFormattedgetter- 缓存管理页面新增:
- 分类统计中"📖 稍后读"条目,显示缓存大小
- "📖 清理稍后读缓存"操作按钮(保留消息记录)
- "📖 清理全部稍后读数据"操作按钮(含确认弹窗,不可撤销)
📝 文件变更
- 新增:
lib/core/services/readlater_device_sync_service.dart - 修改:
lib/features/home/services/cache_service.dart— 新增稍后读缓存管理方法+CacheStats字段 - 修改:
lib/features/home/presentation/cache_management_page.dart— 新增稍后读统计条目+清理操作
[12.22.0] - 2026-05-15
✨ 新功能 — E4视频压缩保存 + E11稍后读同步 + E12句子卡片制作
视频气泡支持压缩保存到相册,稍后读支持云端同步,句子卡片支持截图制作分享
✨ E4 视频压缩保存
ChatVideoBubble新增长按菜单(CupertinoActionSheet)- 新增"💾 压缩保存"选项:使用
video_compress压缩视频(MediumQuality) - 压缩过程显示
CupertinoActivityIndicator+ 进度百分比 - 压缩完成后使用
gal保存到相册(album: 闲言) - 新增"▶️ 播放视频"菜单项
- 权限检测:先检查相册权限,未授权则请求
✨ E11 稍后读离线同步服务
- 新增
ReadlaterSyncService(core/services/readlater_sync_service.dart) - 基于
supabase_flutter实现云端同步 - 核心方法:
uploadMessage/downloadMessages/fullSync/getLastSyncTime/setAutoSync/getAutoSync/deleteMessage - Supabase表名:
readlater_messages,字段: id, user_id, message_id, type, content, meta_json, created_at, updated_at - 使用
AppKVStore存储同步状态(last_sync_time, auto_sync) - 冲突策略:以
updated_at较新的为准 SyncResult模型记录上传/下载/冲突数量ensureInitialized()静态方法确保 Supabase 已初始化
✨ E12 句子卡片制作
ChatSentenceCardBubble操作按钮新增"🎨 制作"- 使用
RepaintBoundary包裹卡片,toImage()截图(3x像素密度) - 截图保存到临时目录,通过
share_plus分享图片 - 分享文本包含句子内容+作者+来源标识
- 生成过程显示 Loading 提示
[12.21.0] - 2026-05-15
🔧 Bug修复 — 信令服务客户端适配服务端修复
服务端已修复心跳/发现/Ping信令,客户端同步更新枚举和处理逻辑
🐛 问题根因
SignalingMessageType枚举缺少heartbeat_ack和discover_response类型_handleMessage中discovercase 错误地调用了_handleDiscoverResponse(应为discoverResponse)heartbeat_ack消息被解析为unknown类型,无法正确处理pong消息处理仅 break,未记录心跳响应时间display-name消息仅日志输出,未存储显示名称
✅ 修复内容
SignalingMessageType新增heartbeatAck('heartbeat_ack')枚举值SignalingMessageType新增discoverResponse('discover_response')枚举值_handleMessage修复discovercase:不再调用_handleDiscoverResponse_handleMessage新增discoverResponsecase:正确调用_handleDiscoverResponse_handleMessage新增heartbeatAckcase:记录心跳响应时间_handleMessage改进pongcase:记录心跳响应时间和日志_handleMessage改进displayNamecase:解析并存储服务器推送的显示名称- 新增
_lastHeartbeatAck字段和lastHeartbeatAckgetter - 新增
_serverDisplayName字段和serverDisplayNamegetter
📝 文档更新
API_FILE_TRANSFER_DOC.md: 更新心跳/发现/ping为双向机制,添加display-name消息类型API_FILE_TRANSFER_CORE_DOC.md: 同步更新API_FILE_TRANSFER_ANALYSIS.md: 标记已修复项(心跳/发现/Ping/display-name/文档)
[5.3.0] - 2026-05-15
✨ 新功能 — E1链接OG元数据自动抓取 + E8全文搜索
链接消息自动抓取OG预览信息,稍后读模式支持全文搜索+搜索结果高亮
✨ E1 链接OG元数据自动抓取服务
- 新增
OgMetadataService(core/services/og_metadata_service.dart)- 使用dio发起HTTP请求,5秒超时,失败静默降级
- 使用compute/isolate处理HTML解析,避免主线程卡顿
- 解析 og:title / og:description / og:image / og:site_name
- 降级策略:title标签 / meta description / favicon
- 相对URL自动转绝对URL
ChatLinkBubble改为StatefulWidget,渲染后异步调用OgMetadataService.fetch- 缺少OG数据时自动触发异步抓取
- 抓取中显示加载占位+指示器
- 抓取成功后更新UI(标题/描述/图片/siteName)
- 新增onMetaUpdated回调通知父组件持久化meta
✨ E8 全文搜索
ChatState新增 searchQuery 字段和 isSearching getterChatState.filteredMessages支持搜索过滤(与分类过滤叠加)ChatState._searchInMessages静态方法:搜索text/author/source/meta.url/meta.title/meta.description/attachments.fileNameChatNotifier新增 searchMessages / setSearchQuery / clearSearch 方法ChatFlowPage稍后读模式AppBar新增🔍搜索按钮- 搜索栏替代分类栏位置,使用CupertinoSearchTextField
- 输入时实时过滤消息列表,显示结果计数(N/Total)
ChatBubble新增 highlightQuery 参数ChatBubble._buildHighlightText方法:匹配文本高亮显示(accent色背景+加粗)
[13.3.0] - 2026-05-15
✨ 新功能 — E2文档预览 + E7阅读统计 + E9标签管理
新增文档预览页面、稍后读阅读统计页面、标签管理服务,丰富稍后读功能体系
✨ E2 文档预览页面
- 新增
DocumentPreviewPage— CupertinoPageScaffold风格 - 接收文件路径参数,支持本地文件和网络链接
- 图片文件:直接预览显示
- 其他文件:显示文件信息卡片(文件名/大小/类型/修改时间)
- 操作按钮:打开文件(url_launcher) / 分享(ShareSheet) / 保存到相册(图片)
- 使用GlassContainer毛玻璃卡片 + AppTheme设计令牌
✨ E7 阅读统计页面
- 新增
ReadlaterStatsPage— CupertinoPageScaffold + CustomScrollView - 统计卡片:总消息数/已读数/未读数 (GlassContainer毛玻璃)
- 类型分布饼图:使用fl_chart PieChart,按消息类型统计(句子/链接/图片/视频/文档/文本)
- 最近7天新增趋势折线图:使用fl_chart LineChart,曲线+渐变填充
- 接收List参数,纯计算无副作用
- 使用AppTheme.ext(context) / AppSpacing / AppTypography / AppRadius设计令牌
✨ E9 标签管理
- ChatMessage模型新增标签便捷方法:getTags / hasTag / addTag / removeTag
- 标签存储在ext['tags']字段,格式: List
- 新增
ReadlaterTagService— 基于AppKVStore持久化 - 核心方法:getAllTags() / addTag() / removeTag() / getMessagesByTag() / getTagStats()
- 标签存储key: 'readlater_tags',数据结构: Map<String, List>
- 支持syncFromMessages / exportToMessages 双向同步
- 支持批量设置/清空标签
[13.2.0] - 2026-05-15
✨ 新功能 — E5 多格式导出 + E6 稍后读提醒
稍后读内容支持JSON/Markdown/ZIP多格式导出,新增稍后读定时提醒通知
✨ E5 多格式导出
_exportReadlater替换为CupertinoActionSheet选择导出格式_exportAsJson(): 导出JSON到剪贴板_exportAsMarkdown(): 导出Markdown到剪贴板(含时间戳/作者/出处/链接)_exportAsZip(): 打包JSON+Markdown为ZIP文件,通过系统分享发送- 新增依赖导入:
archive,path_provider,share_plus
✨ E6 稍后读提醒
LocalNotificationService.scheduleReadLaterReminder(): 调度每日稍后读提醒通知LocalNotificationService.cancelReadLaterReminder(): 取消稍后读提醒_onNotificationTapped新增readlaterpayload 路由跳转至/readlater-chat
[13.1.0] - 2026-05-15
🔧 Bug修复 — 屏幕共享接收方确认按钮
修复接收方收到屏幕共享请求后无法看到确认按钮的问题,完善屏幕共享信令回调链路
🐛 问题根因
TransferSignalingHandler创建时未传入onScreenShareOffer等回调- 接收方收到
screenShareOffer后只添加系统消息,未触发 UI 状态更新 - UI 层未监听屏幕共享请求状态
✅ 修复内容
TransferState新增ScreenShareOffer类和pendingScreenShareOffer字段TransferNotifier传入onScreenShareOffer/Answer/Stop/RemoteInput回调TransferNotifier新增acceptScreenShareOffer()/rejectScreenShareOffer()/clearPendingScreenShareOffer()方法TransferChatPage监听pendingScreenShareOffer弹出CupertinoAlertDialog确认对话框TransferChatPage消息列表新增屏幕共享请求卡片(📺图标+接受/拒绝按钮)- 接受后自动调用
screenShareProvider.startViewing()并导航到ScreenSharePage
[13.0.1] - 2026-05-15
🔧 Bug修复 — 协作画布参与者同步
修复协作画布中对方始终不在线、消息路由错误等关键问题
🐛 修复
- CanvasSyncService:
_handleCanvasJoin/_handleCanvasLeave现在正确维护_participants集合并触发onParticipantsChanged回调 - CanvasSyncService:
joinCanvas方法将本机 deviceId 加入_participants,leaveCanvas清空集合 - CanvasSyncService:
_sendCanvasMessage添加to: _peerId字段,确保消息正确路由到对方设备 - CanvasSyncService:
joinCanvas新增peerId可选参数,用于指定消息目标设备 - CanvasPage:
initState中使用sharedSignalingProvider.deviceId获取本机 deviceId 替代错误的peerDeviceId - CanvasPage: 同时传递
peerDeviceId作为peerId参数,确保消息路由正确 - CanvasNotifier: 构造函数绑定
_syncService.onParticipantsChanged = _handleParticipantsChanged - CanvasNotifier:
joinCanvas方法签名更新,支持传递peerDeviceId到 SyncService
[13.0.0] - 2026-05-15
✨ 新功能 — 稍后读会话 + ChatFlowPage增强
新增稍后读聊天会话、系统分享接收、链接/文档/句子卡片气泡,丰富所有会话体验
✨ 新功能 — 稍后读内置会话
- 工作流(InspirationPage)会话列表新增"📖 稍后读"内置会话,默认置顶
- 点击进入聊天风格页面,支持发送文本/链接/图片/视频/文件/文档
- 类似微信"文件传输助手",自己给自己发消息,管理稍后读内容
✨ 新功能 — 句子详情 → 稍后读会话
- 主页句子详情Sheet点击"稍后读"按钮,句子自动发送到稍后读会话
- 句子以专属卡片气泡展示(渐变背景+作者+出处+统计)
- 取消稍后读时保留历史消息,不删除
✨ 新功能 — ChatFlowPage增强
- 新增ChatLinkBubble: 链接预览卡片(OG元数据+打开/复制按钮)
- 新增ChatDocumentBubble: 文档卡片(PDF/Word/Excel等+打开/分享按钮)
- 新增ChatSentenceCardBubble: 句子卡片(渐变背景+统计+操作)
- ChatMessageType新增: link / document / readlaterSentence
- ChatFlowPage支持动态配置(按sessionType调整标题/分类栏/设置等)
- 所有会话均可使用新增气泡组件
✨ 新功能 — 系统分享接收
- 集成receive_sharing_intent本地包(v1.8.1)
- 新增
SharingReceiverService单例服务(core/services/sharing_receiver_service.dart) - Android/iOS: 通过
getInitialMedia+getMediaStream接收文本/链接/图片/视频/文件 - Web: URL参数降级兼容(text/url/title query参数)
- Windows: 命令行参数降级兼容(自动检测文件路径/文本)
- 分享内容自动写入稍后读会话(conversationId='readlater')
- 文本自动检测URL,链接→sendLink,纯文本→sendText
- 文件按mimeType分发: image→sendImage, video→sendVideo, application→sendDocument, 其他→sendFile
- 分享成功时AppToast提示,失败时记录日志
✨ 新功能 — 稍后读设置面板
- AppBar右侧设置按钮,弹出CupertinoActionSheet
- 支持: 标记全部已读/清空/导出/统计/分享接收开关
📄 开发文档
- 新增:
docs/spec/readlater_chat_spec.md— 稍后读会话+ChatFlowPage增强开发文档
[12.20.0] - 2026-05-15
🔧 Bug修复 + ✨ 功能增强
修复账户安全验证、底部Tab栏、文件传输助手等多项问题
🐛 Bug修复 — 修改密保页面缺少邮箱验证码
- 根因:
security_question_page.dart的邮箱验证方式(receipt)仅输入回执码,缺少发送验证码步骤 - 修复: 新增邮箱验证码发送/倒计时/校验完整流程;新增
EmsEvent.changesecquestion事件类型;验证方式选择器增加"📧 邮箱验证"选项
🐛 Bug修复 — 修改密码页面缺少邮箱验证
- 根因:
change_password_page.dart的邮箱验证方式仅输入回执码,缺少发送验证码步骤 - 修复: 新增邮箱验证码发送/倒计时/校验完整流程;验证方式选择器增加"📧 邮箱"选项;新增
EmsEvent.changepwd事件类型
🔧 功能调整 — 安全与Token管理移至账户设置
- 变更: 将"安全与Token管理"按钮从"我的"页面移至"账户设置"页面
- 原因: 安全管理属于账户设置范畴,集中管理更符合用户心智模型
- 影响:
profile_page.dart移除按钮和_SecuritySheet组件;account_settings_page.dart新增按钮和_SecuritySheet组件
🐛 Bug修复 — 底部Tab栏间距过大+文字太小
- 根因:
tab_icon_sprite.dart中 glowSize=60/iconSize=44 过大导致图标区域占据过多空间;fontSize=10 过小 - 修复: glowSize 60→40,选中iconSize 44→36,未选中 28→24;fontSize 10→12;SizedBox height 14→16
🐛 Bug修复 — 附近设备点进去看不到消息
- 根因: 设备通过LAN发现时id=fingerprint,但消息peerDeviceId可能为信令服务器分配的不同ID
- 修复:
TransferChatPage新增_collectPeerIds()方法,收集设备所有已知ID,消息过滤改为多ID匹配
🐛 Bug修复 — 共享屏幕/协作画布信令未连接
- 根因:
canvasProvider和screenShareProvider各自创建新的未连接SignalingService()实例 - 修复: 新增
shared_signaling_provider.dart,从transferProvider.notifier.pairingService.signalingService获取已连接实例
🐛 Bug修复 — 画布页面返回黑屏
- 根因:
_openCanvas使用context.go()替换整个导航栈,返回时无上一页 - 修复: 改为
Navigator.push()+CupertinoPageRoute,保持导航栈完整
🐛 Bug修复 — 我的设备显示本机+显示IP+消息发送失败
- 根因1:
buildMyDeviceCard对所有设备使用相同样式,无法区分本机与远程 - 修复1: 本机设备使用灰色背景+不可点击+"📱 本机"标签,远程设备保持原有样式
- 根因2:
displayAlias回退显示IP地址 - 修复2:
TransferDevice新增accountAlias字段,优先显示账号昵称而非IP - 根因3:
sendTextMessage固定通道顺序,wsRelay偏好设备无法优先使用WsRelay - 修复3: 根据设备
preferredTransport优先选择通道
✨ 新功能 — 局域网访问二维码弹窗
- 点击局域网访问横幅弹出CupertinoModalPopup sheet
- 弹窗包含:二维码(QrImageView)、URL文本、说明文字、复制链接按钮
🐛 Bug修复 + ✨ 功能增强
修复"我的设备"页面本机设备样式、设备名称显示IP、消息发送失败三个问题
🐛 Bug修复 — 本机设备与远程设备样式区分
- 根因:
buildMyDeviceCard对所有设备(包括本机)使用相同样式,用户无法区分本机与远程设备 - 修复:
TransferState新增localFingerprint字段标识本机设备;buildMyDeviceCard通过 fingerprint 匹配判断本机设备,本机使用灰色背景+不可点击+"📱 本机"标签,远程设备保持原有样式并可点击进入聊天
🐛 Bug修复 — 设备名称显示IP地址
- 根因:
displayAliasgetter 在 alias 为默认值时回退显示 IP 地址,不够友好 - 修复:
TransferDevice新增accountAlias字段(账号昵称/用户名),displayAlias优先使用 accountAlias;fromSignaling从信令数据提取 accountAlias/nickname/username;buildMyDeviceCard不再显示 IP 地址行,改为显示账号昵称
🐛 Bug修复 — 消息发送失败
- 根因:
sendTextMessage按固定顺序尝试通道(LocalSend→WiFi Direct→WebRTC→信令直发→WsRelay),对于 preferredTransport=wsRelay 的"我的设备",信令直发可能成功但服务器未正确路由,导致 WsRelay 通道永远不会被尝试 - 修复:
sendTextMessage新增根据设备preferredTransport优先选择通道逻辑;wsRelay 偏好设备优先通过 WsRelay 中转发送,失败后再尝试其他通道;非 wsRelay 偏好设备保持原有通道顺序
[12.14.0] - 2026-05-14
📋 新增 — 每日任务系统客户端(Flutter)
每日任务系统前端4个文件:API服务层、状态管理层、任务卡片组件、每日任务页面。 支持今日任务列表展示、进度上报、奖励领取、完美日额外奖励。
-
TaskService API服务 —
lib/features/task/services/task_service.dart- getTodayTasks(): 获取今日任务列表
- reportProgress(): 上报任务进度
- claimReward(): 领取任务奖励
- claimPerfectDay(): 领取完美日奖励
- registerCustomTask(): 注册自定义任务
- Riverpod Provider: taskServiceProvider
-
TaskProvider 状态管理 —
lib/features/task/providers/task_provider.dart- DailyTask 数据模型: id/name/icon/type/target/action/customUrl/customPage/expReward/scoreReward/isRandom/progress/completed/claimed/percent
- TaskSummary 统计模型: total/completed/claimed/isPerfectDay/perfectClaimed/date
- TaskState 状态: tasks/summary/isLoading/error
- TaskNotifier: loadTodayTasks/reportProgress/claimReward/claimPerfectDay
- Riverpod StateNotifierProvider: taskProvider
-
TaskCard 任务卡片组件 —
lib/shared/widgets/task_card.dart- iOS风格卡片: emoji图标+名称+进度条+状态按钮
- 三种状态: 进行中(蓝色奖励预览) / 已完成(橙色领取按钮) / 已领取(✅已领取标签)
- 进度条: 蓝色进行中/绿色已完成
- 完成边框高亮(绿色半透明)
- 深色模式适配
-
DailyTaskPage 每日任务页面 —
lib/features/task/presentation/daily_task_page.dart- CupertinoPageScaffold + CustomScrollView
- 顶部统计区: 总任务/已完成/已领取 + 总进度条
- 完美日提示: 橙色渐变卡片 + 领取按钮
- 领取奖励弹窗: CupertinoAlertDialog 显示经验+积分
- 错误状态展示
- 深色模式适配
[12.2.0] - 2026-05-14
✨ 增强 — 收藏同步功能重构为双向同步
问题: "我的收藏"页面同步按钮只做单向同步(本地→云端),不同步云端收藏到本地,无同步进度反馈
- FavoriteState 增加同步状态 —
lib/features/home/providers/favorite_provider.dart- 新增
isSyncing/syncMessage/syncStatus字段 SyncStatus枚举: idle/syncing/success/failedcopyWith支持clearSyncMessage/syncStatus参数
- 新增
- 双向同步逻辑
syncFavorites()—lib/features/home/providers/favorite_provider.dart- Step 1: 拉取云端全量收藏(分页获取,
_fetchAllServerFavorites) - Step 2: 获取本地收藏列表
- Step 3: 上传本地独有收藏到云端(跳过云端已存在的,避免重复)
- Step 4: 拉取云端独有收藏到本地DB(标记已有/新增记录)
- Step 5: 冲突处理(云端已存在则跳过,本地已存在则标记isFavorite)
- Step 6: 刷新收藏列表
- 实时更新
syncMessage进度提示 - 返回
SyncResult(pulled/pushed/skipped/message/isError)
- Step 1: 拉取云端全量收藏(分页获取,
- AppDatabase 新增方法 —
lib/core/storage/database/app_database.dartgetSentencesById(String id): 按ID查询单条SentenceinsertOrUpdateSentence(SentencesCompanion): 插入或替换Sentence记录
- 收藏页面同步UI增强 —
lib/features/home/presentation/favorite_page.dart- 同步按钮增加加载指示器(同步中显示
CupertinoActivityIndicator) - 新增
_buildSyncProgressBanner: 同步进度/成功/失败横幅- 同步中: 蓝色横幅 + 旋转指示器 + 进度文字
- 成功: 绿色横幅 + ✓ 图标 + 结果摘要
- 失败: 红色横幅 + ⚠ 图标 + 错误信息
- 同步完成后3秒自动重置状态,也可手动关闭
- 移除旧的
_syncLocalToCloud/_resolveServerId方法(逻辑迁移到Provider) - 移除不再需要的
FeedService/SearchAllService导入
- 同步按钮增加加载指示器(同步中显示
[12.1.1] - 2026-05-14
🐛 修复 — "我的"页面顶部快捷按钮导航失效
问题: ProfilePage 顶部统计栏(积分/签到/笔记)点击无响应,缺少导航逻辑
- ProfilePage
_UserStatsBar修复 —lib/features/profile/presentation/profile_page.dart_buildStatItem增加route参数和BuildContext参数- 用
GestureDetector包裹Column,添加onTap导航 - 积分 →
AppRoutes.coinLog(/coin-log) - 签到 →
AppRoutes.signin(/signin) - 笔记 →
AppRoutes.noteList(/notes) - 使用
Expanded确保等宽分布,textAlign: center居中标签
[6.1.0] - 2026-05-14
🔌 新功能 — USB OTG有线传输 (F7-01~06)
内容: USB OTG Host模式文件传输,两台Android设备通过USB线缆高速传输文件
- UsbDevice 模型 —
lib/features/file_transfer/services/transport/usb_transport_service.dart- UsbDevice: deviceId/vendorId/productId/deviceName/usbVersion/isConnected
- isXianyanDevice: 通过VendorID自动识别闲言APP认证设备
- toMap/fromMap序列化
- UsbTransportService 重构 —
lib/features/file_transfer/services/transport/usb_transport_service.dart- MethodChannel
xianyan/usb_transport桥接原生USB操作 - isUsbHostSupported(): 检测USB Host模式支持(Android only)
- detectUsbDevice()/detectAllUsbDevices(): 枚举已连接USB设备
- connectDevice(): 建立USB连接(claim interface/endpoint)
- sendFileWithProgress(): 块传输发送+进度回调
- receiveFileWithProgress(): 块传输接收+进度回调
- disconnect(): 断开USB连接
- getTransferSpeed(): 按USB版本返回理论最大速度(USB2.0=480Mbps/3.0=5Gbps/3.1=10Gbps)
- Stream: onUsbDeviceAttached/onUsbDeviceDetached/onConnectionChanged
- 块大小适配: USB 2.0→64KB / USB 3.0→256KB / USB 3.1→512KB
- MethodChannel
- UsbDiscoveryService 重构 —
lib/features/file_transfer/services/discovery/usb_discovery_service.dart- EventChannel
xianyan/usb_events监听原生USB插入/拔出事件 - startMonitoring()/stopMonitoring(): USB设备监听生命周期
- getConnectedDevices(): 获取当前已连接USB设备列表
- getXianyanDevices(): 过滤闲言APP认证设备
- Stream: onDeviceFound/onDeviceRemoved/onDevicesChanged
- 自动扫描已连接设备(_scanExistingDevices)
- EventChannel
- UsbConfirmDialog —
lib/features/file_transfer/presentation/widgets/usb_confirm_dialog.dart- iOS风格CupertinoAlertDialog
- 显示: 设备名称/协议版本/最大速度/认证状态
- [取消] [开始传输] 按钮
- showUsbConfirmDialog() 便捷方法
- TransferFileHandler USB集成 —
lib/features/file_transfer/providers/transfer_file_handler.dart- sendFilesUsb(): USB OTG文件发送(连接→传输→进度→完成)
- cancelTask/pauseTask/resumeTask: usbTether case实现(disconnect/handleUsbDisconnected/handleUsbConnected)
- TransferNotifier USB集成 —
lib/features/file_transfer/providers/transfer_notifier.dart- UsbDiscoveryService实例+生命周期管理
- startUsbMonitoring()/stopUsbMonitoring(): USB监听控制
- getUsbConnectedDevices: 获取USB设备列表
- sendFilesUsb(): 委托FileHandler USB传输
- _setupUsbDiscoveryListeners(): USB设备发现/移除→discoveredDevices状态更新+系统消息
- dispose中清理USB资源
[6.3.0] - 2026-05-14
📋 新功能 — 剪贴板同步管理 (F2-01~10)
内容: 增强版剪贴板同步模块,支持图片同步、历史管理、置顶/搜索/筛选、一键复制粘贴
- ClipboardItem 模型 —
lib/features/collaboration/clipboard/models/clipboard_item.dart- ClipboardItemType枚举: text/image
- 支持toJson/fromJson序列化、copyWith
- previewText/displayDeviceName便捷属性
- ClipboardManagerService —
lib/features/collaboration/clipboard/services/clipboard_manager_service.dart- 基于ClipboardSyncService增强: 图片同步/历史管理/置顶/删除/搜索
- 信令通道推送: 文本和图片类型自动区分
- Stream<List> 实时变更通知
- syncNow: 手动同步系统剪贴板到远端
- copyToSystemClipboard: 一键复制到系统剪贴板
- ClipboardProvider —
lib/features/collaboration/clipboard/providers/clipboard_provider.dart- Riverpod StateNotifierProvider
- ClipboardState: items/searchQuery/isLoading/filter/isSyncing
- ClipboardFilter: all/text/image/pinned
- filteredItems: 置顶优先+筛选+搜索
- ClipboardNotifier: loadItems/pinItem/deleteItem/searchItems/sendToPeer/syncNow
- ClipboardFlowPage —
lib/features/collaboration/clipboard/pages/clipboard_flow_page.dart- iOS风格CupertinoPageScaffold + CupertinoNavigationBar
- 筛选标签: 全部/文本/图片/置顶 (带计数徽标)
- 搜索栏: 实时搜索文本内容
- 条目卡片: 类型图标+内容预览+来源设备+时间+置顶标记
- 文本条目: 点击复制, 长按弹出操作(复制/置顶/发送/删除)
- 图片条目: 点击预览, 长按弹出操作
- 底部栏: 📋粘贴并同步 + 🗑️清空
- 同步状态指示器
- 工具中心入口 —
lib/features/inspiration/models/tool_item.dart- 新增📋剪贴板工具卡片(管理分类, 推荐+新标记)
- 路由注册 —
lib/core/router/app_router.dart- 新增/clipboard路由 → ClipboardFlowPage
- AppRoutes.clipboard常量
[6.2.0] - 2026-05-14
🎨 新功能 — 协作画布 (F1-01~19)
内容: 实时多人协作画布模块,支持画笔/橡皮/形状绘制、CRDT冲突解决、WebSocket实时同步、PNG导出
- Stroke 模型 —
lib/features/collaboration/canvas/models/stroke.dart- StrokeType枚举: pen/eraser/line/rect/circle/text
- 支持toJson/fromJson序列化、copyWith、pointsJson
- Lamport时钟字段用于CRDT冲突解决
- CanvasDocument 模型 —
lib/features/collaboration/canvas/models/canvas_document.dart- 画布文档元信息: id/name/ownerId/participantIds/strokes
- 支持宽高配置(默认1920x1080)
- CanvasCrdt 服务 —
lib/features/collaboration/canvas/services/canvas_crdt.dart- Lamport时钟管理,tick/mergeRemoteClock
- mergeStroke: 按lamportClock+createdAt解决冲突
- mergeSnapshot: 全量同步合并
- MergeResult枚举: added/updated/discarded
- CanvasEngine 服务 —
lib/features/collaboration/canvas/services/canvas_engine.dart- ChangeNotifier,管理当前工具/颜色/线宽状态
- startStroke/addPoint/endStroke: 笔画绘制流程
- undo/redo: 撤销重做支持
- mergeRemoteStroke/mergeSnapshot: 远程合并
- CanvasPainter 组件 —
lib/features/collaboration/canvas/widgets/canvas_painter.dart- CustomPainter渲染所有笔画
- 支持画笔(平滑贝塞尔曲线)/橡皮/直线/矩形/椭圆/文字
- 活动笔画实时渲染 + 远程光标显示
- CanvasToolbar 组件 —
lib/features/collaboration/canvas/widgets/canvas_toolbar.dart- 底部工具栏: 5种工具 + 8色预设 + 线宽滑块
- 撤销/重做/导出/清空按钮
- iOS风格Cupertino组件
- CanvasSyncService —
lib/features/collaboration/canvas/services/canvas_sync_service.dart- 基于SignalingService的实时同步
- broadcastStroke/broadcastCursor: 广播本地操作
- requestSnapshot/handleSnapshot: 断线重连后全量同步
- joinCanvas/leaveCanvas: 画布房间管理
- CanvasProvider —
lib/features/collaboration/canvas/providers/canvas_provider.dart- Riverpod StateNotifierProvider
- CanvasState: strokes/activeStroke/tool/color/width/cursors/participants
- CanvasNotifier: 封装Engine+SyncService
- CanvasPage —
lib/features/collaboration/canvas/pages/canvas_page.dart- 全屏画布 + GestureDetector手势绘制
- 参与者头像显示 + 同步状态栏
- 返回确认(丢弃/继续) + PNG导出(share_plus)
- 清空画布确认弹窗
- 信令服务器 —
server/index.js- 新增canvasRooms: Map<canvasId, Set>
- canvas-join/canvas-leave: 画布房间加入/离开
- canvas-stroke/canvas-cursor: 房间内广播笔画/光标
- canvas-snapshot: 快照请求/响应
- 断线自动清理画布房间
- TransferChatPage — 新增🎨画布入口按钮
- 导航栏trailing区域添加画布按钮
- 点击跳转/canvas/:id路由
- 路由注册 —
/canvas/:id→ CanvasPage
[6.4.1] - 2026-05-14
🐛 修复 — 首页句子卡片空白问题(食物/偏方/酒方等类型)
根因:
_extractTitleFromExtra字段映射与API实际返回字段名不匹配,导致food/prescription/jiufang等类型提取不到标题,卡片显示空白
- feed_model.dart — 修复
_extractTitleFromExtra字段映射:food:['sp']→['sw', 'yh'](sw=食物, yh=相宜/相克说明)prescription:['pf']→['title', 'content']drug:['ym']→['name', 'syz', 'goods_name', 'gg', 'cf']herbal:['zm']→['name', 'effect', 'name_alias', 'spell']tisana:['yc']→['name', 'effect', 'recipe', 'source']couplet:['dl']→['hp', 'sl', 'xl', 'yy']wine:['jp']→['name', 'ingredients', 'usage', 'source']chengyu:['cy', 'cypy']→['cy', 'cyjs', 'cypy', 'cycc']cidian:['zc', 'zcpy']→['zc', 'zcjs', 'zcpy']hitokoto:['hy']→['hitokoto', 'type_name', 'from_source', 'from_who']brainteaser:['nm']→['topic', 'answer']riddle:['mi']→['riddle', 'miidii']efs:['efs']→['facet', 'undertone']- 新增缺失类型
jiufang:['name', 'ingredients', 'usage', 'source', 'method', 'categories']
- home_sentence_model.dart — 修复
HomeSentence.fromFeedItemextra回退逻辑:- 原逻辑: 遍历extra所有entry取第一个短字符串(无类型感知)
- 新逻辑: 使用
_extractTextFromExtra方法,按feedType优先查找类型专属字段,再遍历兜底
- home_sentence_card.dart — 修复
_buildSentenceText空内容处理:- 原逻辑: 空内容时显示
... - 新逻辑: 添加
_typePlaceholder映射表,按feedType显示类型相关占位提示(如 🍜 暂无食物详情 / 💊 暂无偏方详情 / 🍶 暂无酒方详情)
- 原逻辑: 空内容时显示
[11.2.0] - 2026-05-12
🚀 传输扩展功能 — 云端暂存(CloudCache) 服务端API + 部署 + 测试
☁️ 云端暂存服务端 (F8)
-
CloudCache.php 控制器 —
docs/toolsapi/application/api/controller/CloudCache.php:- ThinkPHP 5.x RESTful API控制器
- 8个接口: upload/download/list/info/delete/notify/clean/install
- 安全限制: 未登录10MB/登录50MB文件大小限制
- 危险文件类型检测: php/jsp/asp/exe/bat/cmd/sh/py等30+种扩展名
- MIME类型验证: finfo检测+危险MIME类型黑名单
- 24小时自动清理: cron每小时执行clean接口
- 速率限制: 每IP每分钟60次请求
- 文件名安全处理: sanitizeFileName过滤特殊字符
- 修复:
getOriginalName()→getFilename()(TP5.0兼容) - 修复:
finfo_file()传入文件路径而非文件名 - 修复: 404状态码→410(避免ThinkPHP返回HTML页面)
- 修复:
\Throwable捕获+HttpResponseException透传
-
部署脚本 —
docs/toolsapi/scripts/:upload_cloud_cache.py: SFTP上传+备份+权限设置+数据库安装+cron配置test_cloud_cache_api.py: 20项接口测试(全部通过)fix_permissions.py: 目录权限修复(www:www)debug_cloud_cache*.py: 调试脚本
-
API文档 —
API_FILE_TRANSFER_DOC.md:- 新增第六章"云端暂存API (CloudCache)"
- 10个接口完整文档(安全限制/install/upload/download/list/info/delete/notify/clean/错误码)
-
TransferProvider集成 —
transfer_notifier.dart+transfer_chat_page.dart:- 离线设备→CupertinoDialog提示暂存→上传流程
sendFiles支持forceCloudCache参数checkAndDownloadPendingCache上线自动拉取暂存_notifyCloudCache通知接收方
[11.0.0] - 2026-05-12
🚀 传输扩展功能 — 送达回执 + 断点续传 + 文件分流
已归档版本
12.4.0(Tab栏个性交互) / 12.3.0(搜索三大问题修复) / 12.2.0(收藏双向同步) / 12.1.1(快捷按钮导航) / 12.1.0(USB OTG传输) / 6.4.1(句子卡片空白修复) / 6.3.2(登录加载闪烁修复) / 6.3.1(TextPainter异常修复) / 6.2.0(协作画布) / 6.2.1(剪贴板同步) / 11.2.0(云端暂存) / 11.0.0(送达回执+断点续传) / 5.33.0(智能推荐+标签云+智能模式) / 5.32.0(离线浏览缓存) / 5.31.0(通知设置) / 5.30.0(二维码登录) / 5.29.0(表单校验+本地通知) / 5.28.0(文件传输助手+我的设备) / 5.27.0(用户中心接口同步) / 5.26.0(文件传输核心架构) / 5.22.0(聊天多媒体+视觉增强) / 4.21.0(聊天会话流) / 5.11.0(通用设置重构) / 5.10.0(关于页面+图标统一) / 3.9.9(画布样式编辑) / 3.9.8(拖拽描边/文本回写/壁纸无限加载) / 3.9.7(画布圆角+导出修复) / 3.9.6(画布圆角/文字按钮卡死) / 3.9.5(Bug回归修复) / 3.9.4(本地化/HTTP明文) / 3.9.3(画布圆角/壁纸卡死) / 3.9.2(画布圆角/文字按钮/壁纸) / 3.9.1(历史卡死/同步丢失) / 3.9.0(编辑器增强) / 3.8.0 / 2.58.0(六大Bug修复) / 2.57.0(开发计划) / 2.56.0(README更新) / 2.55.1(代码质量清理) / 1.55.0(灵感页面重构) / 1.54.0(个人中心+签到Bug) / 1.53.0(分类列表+骨架屏) / 1.52.0(句子卡片不更新) / 1.51.0(句子循环重复) / 1.50.0(频道同步延迟) / 1.49.0(刷新无响应+分类同步) / 1.48.0(句子广场无限循环) / 1.47.0(API类型转换崩溃) / 1.46.0(句子来源页面) / 1.45.0(笔记自动保存) / 1.44.2(笔记Bug修复) / 1.44.1(笔记删除Bug) / 1.44.0(API集成补全) / 1.40.0(用户安全接口) / 1.39.0(卡片震动/分类切换) / 1.31.0(API功能全面接入) / 1.30.0(传统色页面重构) / 1.23.0(偷工减料修复) / 1.22.0(句子广场交互) / 1.21.0(数据管理卡死/Tab抖动) — 更早版本详见 git history