Files
xianyan/CHANGELOG.md
Developer fc6fd7be0e feat: 完成v10.1.0版本大更新,新增密保系统、勋章、任务、排行榜等功能
### 变更详情
1. 新增密保问题系统,支持8种预置验证问题,多场景支持多验证方式
2. 新增勋章管理模块,包含勋章配置、用户勋章关联管理
3. 新增每日任务系统,支持任务配置和用户进度追踪
4. 新增赛季排行榜功能,支持周/月赛季排行与奖励结算
5. 新增信息流推荐权重配置管理
6. 重构服务路径分层,按设备/网络/数据分类管理服务
7. 优化Feed请求参数截断逻辑,避免URL过长
8. 新增等级工具类,统一处理等级颜色与称号展示
9. 新增屏幕共享共享信令Provider,复用传输服务实例
10. 新增Android/iOS分享适配与桌面小组件支持
11. 清理旧版测试脚本,新增部署维护脚本
12. 完善用户注销关联数据清理逻辑
2026-05-15 07:02:56 +08:00

56 KiB
Raw Blame History

Changelog

所有重要变更均记录于此文件。格式基于 Keep a Changelog


[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.dartChatFlowReadlaterHelper 静态辅助类
  • chat_flow_conversation_mixin.dartChatFlowConversationHelper 静态辅助类
  • 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_service
    • data/ (5): backup_service, data_export_service, settings_export_service, home_widget_service, jinrishici_sdk_service
    • device/ (5): app_lock_service, battery_optimization_service, device_info_service, haptic_service, screen_wake_service
    • network/ (4): connectivity_service, deep_link_service, network_proxy_service, og_metadata_service
    • notification/ (4): local_notification_service, notification_scheduler, notification_service, readlater_reminder_service
    • readlater/ (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行heartbeat case 仅更新 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 中,被通用转发丢弃
  • 修复: 新增 ping case回复 { type: 'pong', timestamp } 并更新 lastBeat
  • 影响: 客户端可以主动测试连通性

🔧 服务端优化 — 注册响应顺序

  • 根因: _onConnectiondisplay-nameregistered 之前发送
  • 修复: 先发送 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
  • 修复 pong case记录心跳响应时间
  • 修复 displayName case解析并存储服务器推送的设备名称

[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 字段和 readlaterSizeFormatted getter
  • 缓存管理页面新增:
    • 分类统计中"📖 稍后读"条目,显示缓存大小
    • "📖 清理稍后读缓存"操作按钮(保留消息记录)
    • "📖 清理全部稍后读数据"操作按钮(含确认弹窗,不可撤销)

📝 文件变更

  • 新增: 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_ackdiscover_response 类型
  • _handleMessagediscover case 错误地调用了 _handleDiscoverResponse(应为 discoverResponse
  • heartbeat_ack 消息被解析为 unknown 类型,无法正确处理
  • pong 消息处理仅 break未记录心跳响应时间
  • display-name 消息仅日志输出,未存储显示名称

修复内容

  • SignalingMessageType 新增 heartbeatAck('heartbeat_ack') 枚举值
  • SignalingMessageType 新增 discoverResponse('discover_response') 枚举值
  • _handleMessage 修复 discover case不再调用 _handleDiscoverResponse
  • _handleMessage 新增 discoverResponse case正确调用 _handleDiscoverResponse
  • _handleMessage 新增 heartbeatAck case记录心跳响应时间
  • _handleMessage 改进 pong case记录心跳响应时间和日志
  • _handleMessage 改进 displayName case解析并存储服务器推送的显示名称
  • 新增 _lastHeartbeatAck 字段和 lastHeartbeatAck getter
  • 新增 _serverDisplayName 字段和 serverDisplayName getter

📝 文档更新

  • 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 getter
  • ChatState.filteredMessages 支持搜索过滤(与分类过滤叠加)
  • ChatState._searchInMessages 静态方法搜索text/author/source/meta.url/meta.title/meta.description/attachments.fileName
  • ChatNotifier 新增 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 新增 readlater payload 路由跳转至 /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 加入 _participantsleaveCanvas 清空集合
  • 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→24fontSize 10→12SizedBox height 14→16

🐛 Bug修复 — 附近设备点进去看不到消息

  • 根因: 设备通过LAN发现时id=fingerprint但消息peerDeviceId可能为信令服务器分配的不同ID
  • 修复: TransferChatPage 新增 _collectPeerIds() 方法收集设备所有已知ID消息过滤改为多ID匹配

🐛 Bug修复 — 共享屏幕/协作画布信令未连接

  • 根因: canvasProviderscreenShareProvider 各自创建新的未连接 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地址

  • 根因: displayAlias getter 在 alias 为默认值时回退显示 IP 地址,不够友好
  • 修复: TransferDevice 新增 accountAlias 字段(账号昵称/用户名),displayAlias 优先使用 accountAliasfromSignaling 从信令数据提取 accountAlias/nickname/usernamebuildMyDeviceCard 不再显示 IP 地址行,改为显示账号昵称

🐛 Bug修复 — 消息发送失败

  • 根因: sendTextMessage 按固定顺序尝试通道LocalSend→WiFi Direct→WebRTC→信令直发→WsRelay对于 preferredTransport=wsRelay 的"我的设备",信令直发可能成功但服务器未正确路由,导致 WsRelay 通道永远不会被尝试
  • 修复: sendTextMessage 新增根据设备 preferredTransport 优先选择通道逻辑wsRelay 偏好设备优先通过 WsRelay 中转发送,失败后再尝试其他通道;非 wsRelay 偏好设备保持原有通道顺序

[12.18.3] - 2026-05-15

🐛 Bug修复 + 功能增强

修复附近设备点击后看不到消息的问题;局域网访问横幅增加二维码弹窗

🐛 Bug修复 — 附近设备消息过滤

  • 根因: 设备通过LAN发现时 id=fingerprint,但同一设备通过信令通道收到的消息 peerDeviceId 可能为信令服务器分配的ID与fingerprint不同导致聊天页面消息过滤条件 m.peerDeviceId == widget.peerDevice.id 无法匹配
  • 修复: TransferChatPage 新增 _collectPeerIds() 方法收集设备的所有已知IDid、fingerprint、pairedDevices/discoveredDevices/myDevices中同fingerprint的设备ID消息过滤改为多ID匹配+多sessionId匹配

新功能 — 局域网访问二维码弹窗

  • 点击局域网访问横幅不再直接复制链接改为弹出CupertinoModalPopup sheet
  • 弹窗包含二维码QrImageView圆角样式、URL文本可选中复制、说明文字、复制链接按钮
  • 横幅右侧图标从剪贴板图标改为二维码扫描图标,更直观

[12.18.2] - 2026-05-15

🐛 Bug修复 — 协作画布返回黑屏

修复从传输聊天页进入协作画布后,点击返回出现黑屏的问题

根因

  • _openCanvas 方法使用 context.go() 导航到画布页面,go() 会替换整个导航栈
  • 画布页面返回时导航栈为空,无上一页可回退,导致黑屏

修复

  • context.go() 改为 Navigator.push() + CupertinoPageRoute,保持导航栈完整
  • 通过 ref.read(authProvider) 获取 userId 并传递给 CanvasPage
  • 移除不再使用的 go_routerapp_router.dart import

[12.18.1] - 2026-05-15

🐛 Bug修复 — 协作画布/屏幕共享信令服务未连接

修复canvasProvider和screenShareProvider各自创建未连接的SignalingService实例导致协作画布和屏幕共享无法正常通信的问题

根因

  • canvasProvider 直接 SignalingService() 创建新实例,未连接信令服务器
  • screenShareProvider 同样直接 SignalingService() 创建新实例,未连接信令服务器

修复

  • 新增 shared_signaling_provider.dart,从 transferProvider.notifier.pairingService.signalingService 获取已连接实例
  • canvasProvider 改为 ref.watch(sharedSignalingProvider) 获取共享信令服务
  • screenShareProvider 改为 ref.watch(sharedSignalingProvider) 获取共享信令服务

[12.18.0] - 2026-05-15

🔧 Bug修复 + 功能增强

修复多个关键Bug增强文件传输稳定性新增发现页工具箱

🐛 Bug修复

  • USB Transport MissingPluginException: 所有MethodChannel调用添加MissingPluginException捕获无原生实现时优雅降级
  • 文件传输扫描卡死: USB发现服务EventChannel添加MissingPluginException处理设备扫描改为并行执行(Future.wait)避免阻塞UI
  • 跨网文件传输失败: discoverMyDevices自动连接信令服务器扫描时自动触发connectSignalingLocalSend连接超时从10s增至15s
  • 搜索超时: 搜索超时从8-10s增至12-15s优化超时提示文案
  • 搜索结果HTML符号: 搜索高亮内容应用stripHtml+decodeHtmlEntities清理自动高亮输入也先cleanHtml
  • Feed API 414错误: seen_ids/seen_hashes参数限制最多30个避免URL过长

新功能

  • 工作流页面新增会话流: 底部Tab"发现"(工作流)页面新增"会话流📡"条目(RSS/XML订阅)
  • 会话流登录状态: 未登录点击提示"请先登录",已登录提示"即将开放"

🏗️ 重构

  • file_transfer_page.dart拆分: 1102行拆分为5个Mixin文件(每个<800行)
    • file_transfer_page.dart(157行) — 主页面+build+TabBar
    • file_transfer_discovery_tab.dart(394行) — 发现设备Tab
    • file_transfer_my_devices_tab.dart(191行) — 我的设备Tab
    • file_transfer_records_tab.dart(223行) — 传输记录Tab
    • file_transfer_debug_panel.dart(144行) — 调试面板

[12.17.0] - 2026-05-15

🛡️ 密保问题系统 — 注册+管理+多验证方式

新增密保问题功能,支持注册时选填密保、个人中心管理密保、修改密码/邮箱/密保时多验证方式

📝 注册页面

  • Step3新增密保问题选填区域折叠展开式
  • CupertinoPicker弹窗选择8个预置密保问题
  • 密保答案输入框1-50位
  • 注册API新增 sec_question / sec_answer 可选参数

🛡️ 密保问题管理页面(新建)

  • security_question_page.dart — 设置/修改密保问题
  • 状态卡片:显示密保是否已设置 + 当前问题
  • 身份验证:支持密码/原密保答案/邮箱回执 三选一
  • 新密保设置:选择问题 + 输入答案
  • 路由:/settings/security-question

⚙️ 账户设置页面

  • 新增「密保问题」管理行(修改密码行下方)
  • 右侧显示状态徽标:已设置(绿)/未设置(灰)

🔑 修改密码页面(重构)

  • 新增身份验证分段选择器:🔑 原密码 / 🛡️ 密保 / 📧 邮箱
  • 根据选择动态切换验证表单
  • API新增 verify_method 参数password/sec_question/receipt

📧 修改邮箱弹窗(重构)

  • 新增验证方式分段选择器:📧 回执 / 🛡️ 密保
  • 密保验证时显示答案输入框
  • API新增 verify_method / sec_answer 参数

🔧 底层服务变更

  • ReceiptHelper: 新增 changeSecQuestion ReceiptAction
  • UserModel: 新增 secQuestion / secQuestionText / hasSecQuestion 字段
  • UserSecurityService: 新增 secQuestions() / changeSecQuestion() 方法
  • UserSecurityService.changePassword(): 支持 verify_method 多验证方式
  • UserSecurityService.changeEmail(): 支持 verify_method 多验证方式
  • UserCenterService.changeEmail(): 同步支持 verify_method 多验证方式
  • AuthService: 新增 secQuestions() / changeSecQuestion() 委托方法
  • AuthProvider.register(): 新增 secQuestion / secAnswer 参数
  • AuthProvider.changePassword(): 新增 verifyMethod / secAnswer 参数

📐 验证逻辑规则

操作 验证方式(三选一)
修改密保 密码 / 原密保答案 / 邮箱回执
修改密码 原密码 / 密保答案 / 邮箱回执
修改邮箱 原邮箱回执 / 密保答案

[12.16.1] - 2026-05-14

🐛 修复 — 底部Tab栏4项UI问题

修复底部导航栏显示异常:双文本重叠、图标文字间距过大、选中图标偏小、阴影范围不足

  1. 双文本问题app_shell.dart

    • 移除 GlassBottomBarTab 的 label 属性(设为空字符串)
    • 文字显隐由 TabIconSprite 统一控制:选中时隐藏文字,未选中时显示单个文字
  2. 去掉空白tab_icon_sprite.dart

    • 移除 SVG 图标与文字之间的 SizedBox(height: 2) 间距
    • 文字紧贴图标底部,消除大片空白
  3. 增大选中图标tab_icon_sprite.dart

    • 选中时图标尺寸从 36px → 44px
    • 光晕容器从 44px → 60px
    • 浮动粒子从 5 个 → 7 个
  4. 增大阴影范围tab_icon_sprite.dart

    • 光晕半径乘数 1.4xalpha 从 0.45 → 0.55
    • 渐变从 3 色阶 → 4 色阶,过渡更柔和
    • 新增 MaskFilter.blur(BlurStyle.normal, 8) 模糊滤镜
    • 粒子半径从 16+10 → 22+14尺寸从 3.0 → 4.5
    • 粒子阴影 blurRadius 从 3 → 6新增 spreadRadius: 2

[12.16.0] - 2026-05-14

🎮 游戏化系统v2 — 五大功能全量上线

Phase 1~5 全部完成包含EXP独立体系+等级展示、勋章系统、每日任务、赛季排行榜、管理员后台完善 同时修复管理员后台5个bug修复客户端4个类型错误

Phase 1: EXP独立体系 + 等级展示

  • 服务端: User.php新增exp()方法+nextlevelByExp()等级查找表(Lv1~Lv10)
  • 服务端: UserCenter.php返回level/exp/exp_to_next/exp_progress/level_title
  • 客户端: level_card.dart + level_utils.dart等级卡片组件
  • 测试: 7/7通过

🏅 Phase 2: 勋章系统

  • 服务端: Achievement.php新增badges()/badgeDisplay()/checkBadges()
  • 管理员: Badge CRUD 8文件 + UserBadge 5文件
  • 客户端: badge_wall_page + badge_provider + badge_icon
  • 测试: 7/7通过

📋 Phase 3: 每日任务系统

  • 服务端: Task.php(today/reportProgress/claim/claimPerfect/registerCustom)
  • 管理员: DailyTask CRUD 8文件 + UserTask 5文件
  • 客户端: daily_task_page + task_provider + task_service + task_card
  • 测试: 9/10通过

🏆 Phase 4: 赛季排行榜

  • 服务端: Rank.php(seasons/leaderboard/myRank/claimReward)
  • 管理员: RankSeason CRUD+结算 9文件 + RankRecord 5文件
  • 客户端: rank_page + rank_provider + rank_service + rank_item_card
  • 测试: 7/7通过

🔧 Phase 5: 管理员后台完善

  • UserExpLog只读管理5文件
  • 用户编辑表单新增EXP字段
  • 全部菜单权限插入

🐛 Bug修复

  • feed_weight页面无法访问(创建Model/View/JS/Lang)
  • userdeletion通过/拒绝无反应(重写为jQuery AJAX+Layer.confirm)
  • user/user删除不生效(重写del()支持批量+清理15张关联表)
  • 注销审核数据清理(添加新表到清理列表)
  • 客户端: task_service/rank_item_card类型错误修复

📊 数据库迁移

  • migrate_v11.sql: exp字段 + user_exp_log + tool_badge + tool_user_badge
  • migrate_v12.sql: tool_daily_task + tool_user_task
  • migrate_v13.sql: tool_rank_season + tool_rank_record
  • tool_feed_weight_config表创建+18种内容类型默认数据

[12.15.0] - 2026-05-14

新增 — EXP经验值日志后台管理 + 用户编辑表单EXP字段

后台新增EXP经验值日志只读管理模块管理员可查看用户EXP变动记录 用户编辑表单新增EXP经验值字段支持手动修改经验值。

  1. UserExpLog 控制器docs/toolsapi/application/admin/controller/user/UserExpLog.php

    • 继承Backend只读模式禁止编辑/删除)
    • searchFields: id
  2. UserExpLog 模型docs/toolsapi/application/admin/model/UserExpLog.php

    • 表名 user_exp_log自动时间戳(createtime)
    • belongsTo User 关联LEFT JOIN
    • getActionList(): 签到/任务/成就/勋章/完美日/排行/管理员
  3. 列表视图docs/toolsapi/application/admin/view/user/user_exp_log/index.html

    • 只读列表页面data-operate-edit="false" data-operate-del="false"
    • 仅保留刷新按钮
  4. 前端JSdocs/toolsapi/public/assets/js/backend/user/user_exp_log.js

    • bootstrapTable列配置: ID/用户ID/用户昵称/行为/变动量(+绿色/-红色)/变动前/变动后/备注/创建时间
    • 行为搜索下拉: 签到/任务/成就/勋章/完美日/排行/管理员
    • 变动量格式化: 正数绿色label-success负数红色label-danger
  5. 语言包docs/toolsapi/application/admin/lang/zh-cn/user/user_exp_log.php

    • 中文字段映射: 用户ID/用户/行为/变动量/变动前/变动后/备注/创建时间
  6. 用户编辑表单EXP字段docs/toolsapi/application/admin/view/user/user/user/edit.html

    • 积分字段后新增EXP经验值输入框(number类型)
    • 帮助文本: "经验值,修改后等级会自动重算"
  7. 用户语言包EXP条目docs/toolsapi/application/admin/lang/zh-cn/user/user.php

    • 新增 'Exp' => '经验值'

[12.14.0] - 2026-05-14

📋 新增 — 每日任务系统客户端Flutter

每日任务系统前端4个文件API服务层、状态管理层、任务卡片组件、每日任务页面。 支持今日任务列表展示、进度上报、奖励领取、完美日额外奖励。

  1. TaskService API服务lib/features/task/services/task_service.dart

    • getTodayTasks(): 获取今日任务列表
    • reportProgress(): 上报任务进度
    • claimReward(): 领取任务奖励
    • claimPerfectDay(): 领取完美日奖励
    • registerCustomTask(): 注册自定义任务
    • Riverpod Provider: taskServiceProvider
  2. 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
  3. TaskCard 任务卡片组件lib/shared/widgets/task_card.dart

    • iOS风格卡片: emoji图标+名称+进度条+状态按钮
    • 三种状态: 进行中(蓝色奖励预览) / 已完成(橙色领取按钮) / 已领取(已领取标签)
    • 进度条: 蓝色进行中/绿色已完成
    • 完成边框高亮(绿色半透明)
    • 深色模式适配
  4. DailyTaskPage 每日任务页面lib/features/task/presentation/daily_task_page.dart

    • CupertinoPageScaffold + CustomScrollView
    • 顶部统计区: 总任务/已完成/已领取 + 总进度条
    • 完美日提示: 橙色渐变卡片 + 领取按钮
    • 领取奖励弹窗: CupertinoAlertDialog 显示经验+积分
    • 错误状态展示
    • 深色模式适配

[12.2.0] - 2026-05-14

增强 — 收藏同步功能重构为双向同步

问题: "我的收藏"页面同步按钮只做单向同步(本地→云端),不同步云端收藏到本地,无同步进度反馈

  1. FavoriteState 增加同步状态lib/features/home/providers/favorite_provider.dart
    • 新增 isSyncing/syncMessage/syncStatus 字段
    • SyncStatus 枚举: idle/syncing/success/failed
    • copyWith 支持 clearSyncMessage/syncStatus 参数
  2. 双向同步逻辑 syncFavorites()lib/features/home/providers/favorite_provider.dart
    • Step 1: 拉取云端全量收藏(分页获取,_fetchAllServerFavorites
    • Step 2: 获取本地收藏列表
    • Step 3: 上传本地独有收藏到云端(跳过云端已存在的,避免重复)
    • Step 4: 拉取云端独有收藏到本地DB标记已有/新增记录)
    • Step 5: 冲突处理云端已存在则跳过本地已存在则标记isFavorite
    • Step 6: 刷新收藏列表
    • 实时更新 syncMessage 进度提示
    • 返回 SyncResultpulled/pushed/skipped/message/isError
  3. AppDatabase 新增方法lib/core/storage/database/app_database.dart
    • getSentencesById(String id): 按ID查询单条Sentence
    • insertOrUpdateSentence(SentencesCompanion): 插入或替换Sentence记录
  4. 收藏页面同步UI增强lib/features/home/presentation/favorite_page.dart
    • 同步按钮增加加载指示器(同步中显示 CupertinoActivityIndicator
    • 新增 _buildSyncProgressBanner: 同步进度/成功/失败横幅
      • 同步中: 蓝色横幅 + 旋转指示器 + 进度文字
      • 成功: 绿色横幅 + ✓ 图标 + 结果摘要
      • 失败: 红色横幅 + ⚠ 图标 + 错误信息
    • 同步完成后3秒自动重置状态也可手动关闭
    • 移除旧的 _syncLocalToCloud/_resolveServerId 方法逻辑迁移到Provider
    • 移除不再需要的 FeedService/SearchAllService 导入

[12.1.1] - 2026-05-14

🐛 修复 — "我的"页面顶部快捷按钮导航失效

问题: ProfilePage 顶部统计栏(积分/签到/笔记)点击无响应,缺少导航逻辑

  1. 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线缆高速传输文件

  1. UsbDevice 模型lib/features/file_transfer/services/transport/usb_transport_service.dart
    • UsbDevice: deviceId/vendorId/productId/deviceName/usbVersion/isConnected
    • isXianyanDevice: 通过VendorID自动识别闲言APP认证设备
    • toMap/fromMap序列化
  2. 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
  3. 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)
  4. UsbConfirmDialoglib/features/file_transfer/presentation/widgets/usb_confirm_dialog.dart
    • iOS风格CupertinoAlertDialog
    • 显示: 设备名称/协议版本/最大速度/认证状态
    • [取消] [开始传输] 按钮
    • showUsbConfirmDialog() 便捷方法
  5. TransferFileHandler USB集成lib/features/file_transfer/providers/transfer_file_handler.dart
    • sendFilesUsb(): USB OTG文件发送(连接→传输→进度→完成)
    • cancelTask/pauseTask/resumeTask: usbTether case实现(disconnect/handleUsbDisconnected/handleUsbConnected)
  6. 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)

内容: 增强版剪贴板同步模块,支持图片同步、历史管理、置顶/搜索/筛选、一键复制粘贴

  1. ClipboardItem 模型lib/features/collaboration/clipboard/models/clipboard_item.dart
    • ClipboardItemType枚举: text/image
    • 支持toJson/fromJson序列化、copyWith
    • previewText/displayDeviceName便捷属性
  2. ClipboardManagerServicelib/features/collaboration/clipboard/services/clipboard_manager_service.dart
    • 基于ClipboardSyncService增强: 图片同步/历史管理/置顶/删除/搜索
    • 信令通道推送: 文本和图片类型自动区分
    • Stream<List> 实时变更通知
    • syncNow: 手动同步系统剪贴板到远端
    • copyToSystemClipboard: 一键复制到系统剪贴板
  3. ClipboardProviderlib/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
  4. ClipboardFlowPagelib/features/collaboration/clipboard/pages/clipboard_flow_page.dart
    • iOS风格CupertinoPageScaffold + CupertinoNavigationBar
    • 筛选标签: 全部/文本/图片/置顶 (带计数徽标)
    • 搜索栏: 实时搜索文本内容
    • 条目卡片: 类型图标+内容预览+来源设备+时间+置顶标记
    • 文本条目: 点击复制, 长按弹出操作(复制/置顶/发送/删除)
    • 图片条目: 点击预览, 长按弹出操作
    • 底部栏: 📋粘贴并同步 + 🗑️清空
    • 同步状态指示器
  5. 工具中心入口lib/features/inspiration/models/tool_item.dart
    • 新增📋剪贴板工具卡片(管理分类, 推荐+新标记)
  6. 路由注册lib/core/router/app_router.dart
    • 新增/clipboard路由 → ClipboardFlowPage
    • AppRoutes.clipboard常量

[6.2.0] - 2026-05-14

🎨 新功能 — 协作画布 (F1-01~19)

内容: 实时多人协作画布模块,支持画笔/橡皮/形状绘制、CRDT冲突解决、WebSocket实时同步、PNG导出

  1. Stroke 模型lib/features/collaboration/canvas/models/stroke.dart
    • StrokeType枚举: pen/eraser/line/rect/circle/text
    • 支持toJson/fromJson序列化、copyWith、pointsJson
    • Lamport时钟字段用于CRDT冲突解决
  2. CanvasDocument 模型lib/features/collaboration/canvas/models/canvas_document.dart
    • 画布文档元信息: id/name/ownerId/participantIds/strokes
    • 支持宽高配置(默认1920x1080)
  3. CanvasCrdt 服务lib/features/collaboration/canvas/services/canvas_crdt.dart
    • Lamport时钟管理tick/mergeRemoteClock
    • mergeStroke: 按lamportClock+createdAt解决冲突
    • mergeSnapshot: 全量同步合并
    • MergeResult枚举: added/updated/discarded
  4. CanvasEngine 服务lib/features/collaboration/canvas/services/canvas_engine.dart
    • ChangeNotifier管理当前工具/颜色/线宽状态
    • startStroke/addPoint/endStroke: 笔画绘制流程
    • undo/redo: 撤销重做支持
    • mergeRemoteStroke/mergeSnapshot: 远程合并
  5. CanvasPainter 组件lib/features/collaboration/canvas/widgets/canvas_painter.dart
    • CustomPainter渲染所有笔画
    • 支持画笔(平滑贝塞尔曲线)/橡皮/直线/矩形/椭圆/文字
    • 活动笔画实时渲染 + 远程光标显示
  6. CanvasToolbar 组件lib/features/collaboration/canvas/widgets/canvas_toolbar.dart
    • 底部工具栏: 5种工具 + 8色预设 + 线宽滑块
    • 撤销/重做/导出/清空按钮
    • iOS风格Cupertino组件
  7. CanvasSyncServicelib/features/collaboration/canvas/services/canvas_sync_service.dart
    • 基于SignalingService的实时同步
    • broadcastStroke/broadcastCursor: 广播本地操作
    • requestSnapshot/handleSnapshot: 断线重连后全量同步
    • joinCanvas/leaveCanvas: 画布房间管理
  8. CanvasProviderlib/features/collaboration/canvas/providers/canvas_provider.dart
    • Riverpod StateNotifierProvider
    • CanvasState: strokes/activeStroke/tool/color/width/cursors/participants
    • CanvasNotifier: 封装Engine+SyncService
  9. CanvasPagelib/features/collaboration/canvas/pages/canvas_page.dart
    • 全屏画布 + GestureDetector手势绘制
    • 参与者头像显示 + 同步状态栏
    • 返回确认(丢弃/继续) + PNG导出(share_plus)
    • 清空画布确认弹窗
  10. 信令服务器server/index.js
    • 新增canvasRooms: Map<canvasId, Set>
    • canvas-join/canvas-leave: 画布房间加入/离开
    • canvas-stroke/canvas-cursor: 房间内广播笔画/光标
    • canvas-snapshot: 快照请求/响应
    • 断线自动清理画布房间
  11. TransferChatPage — 新增🎨画布入口按钮
    • 导航栏trailing区域添加画布按钮
    • 点击跳转/canvas/:id路由
  12. 路由注册/canvas/:id → CanvasPage

[6.4.1] - 2026-05-14

🐛 修复 — 首页句子卡片空白问题(食物/偏方/酒方等类型)

根因: _extractTitleFromExtra 字段映射与API实际返回字段名不匹配导致food/prescription/jiufang等类型提取不到标题卡片显示空白

  1. 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']
  2. home_sentence_model.dart — 修复 HomeSentence.fromFeedItem extra回退逻辑:
    • 原逻辑: 遍历extra所有entry取第一个短字符串无类型感知
    • 新逻辑: 使用 _extractTextFromExtra 方法按feedType优先查找类型专属字段再遍历兜底
  3. home_sentence_card.dart — 修复 _buildSentenceText 空内容处理:
    • 原逻辑: 空内容时显示 ...
    • 新逻辑: 添加 _typePlaceholder 映射表按feedType显示类型相关占位提示🍜 暂无食物详情 / 💊 暂无偏方详情 / 🍶 暂无酒方详情)

[11.2.0] - 2026-05-12

🚀 传输扩展功能 — 云端暂存(CloudCache) 服务端API + 部署 + 测试

☁️ 云端暂存服务端 (F8)

  1. 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透传
  2. 部署脚本docs/toolsapi/scripts/:

    • upload_cloud_cache.py: SFTP上传+备份+权限设置+数据库安装+cron配置
    • test_cloud_cache_api.py: 20项接口测试(全部通过)
    • fix_permissions.py: 目录权限修复(www:www)
    • debug_cloud_cache*.py: 调试脚本
  3. API文档API_FILE_TRANSFER_DOC.md:

    • 新增第六章"云端暂存API (CloudCache)"
    • 10个接口完整文档(安全限制/install/upload/download/list/info/delete/notify/clean/错误码)
  4. 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