feat: 新增CTC云端笔记仓库功能

- 新增多语言国际化文案支持笔记仓库模块
- 配置Universal Links与App Links支持ctc.s2ss.com域名跳转
- 实现CTS会话入口与会话时间更新逻辑
- 新增CTC笔记完整服务栈:API客户端、本地存储、同步服务
- 新增笔记编辑、预览、冲突解决、版本对比组件
- 新增二维码扫码/分享功能与路由配置
- 修复UrlAnalyzerService调用参数冗余问题
- 修复ProfileHeader组件样式问题
- 统一macOS部署目标版本为13.0
- 抑制liquid_glass_widgets高频调试日志
This commit is contained in:
Developer
2026-06-11 08:46:46 +08:00
parent 7a6d555e4c
commit 016ad3cea1
60 changed files with 8372 additions and 760 deletions

View File

@@ -4,6 +4,231 @@
***
## [v6.42.0] - 2026-06-11
### 📝 笔记仓库 — 数量限制/离线模式/搜索增强/版本对比/同步进度/键盘管理
#### 新增
| 功能 | 说明 |
|---|---|
| 笔记数量限制 | 每设备最多10个笔记`addNote()` 增加上限校验,悬浮框显示剩余可创建数量,达到上限时弹窗提示 |
| 离线模式 | 网络异常时操作自动加入离线队列,本地仍可正常使用;网络恢复后点击"重试"自动同步 |
| 搜索范围选择 | 搜索栏增加"全部/钥匙/内容/标签"四个范围筛选按钮,支持精确搜索 |
| 版本对比UI | 历史页面增加"对比"模式选择任意2个版本进行可视化diff对比 |
| 同步进度条 | 同步状态条增加进度百分比和进度条,同步中/成功/失败三种状态直观显示 |
| 同步重试按钮 | 同步失败或离线队列有数据时显示"重试"按钮,空闲时显示"同步"按钮 |
| 网格/时间线滑动操作 | 网格布局和时间线布局均支持右滑操作(星标/删除),与列表布局一致 |
| KeyboardManager接入 | 编辑页/列表页/悬浮框均接入`KeyboardManager`,点击非输入区域自动收起键盘 |
| FocusNode管理 | 所有输入框添加`FocusNode`,配合`KeyboardManager.markUserTapped`防止键盘意外弹出 |
#### 变更
| 变更 | 说明 |
|---|---|
| `CtcNoteListState` 扩展 | 新增 `syncStatus`/`syncProgress`/`syncError`/`offlineQueue`/`maxNotes`/`isAtLimit`/`remainingSlots`/`hasOfflineActions` 字段 |
| `addNote()` 离线容错 | 服务端写入失败时不再直接返回false而是加入离线队列并本地保存 |
| `deleteNote()` 离线容错 | 删除失败时同样加入离线队列,本地先删除 |
| 设置页动态主题增强 | `CupertinoSwitch`添加`inactiveTrackColor``CupertinoSlidingSegmentedControl`添加`thumbColor` |
| 自动同步修复 | `startAutoSync`参数从`notes`改为`notesProvider`回调,每次同步获取最新列表,不再使用闭包快照 |
| 编辑页保存统一走同步服务 | `_saveContent()`改用`CtcSyncService.pushNote`,不再直接调用`api.writeNote`,确保历史快照保存+离线队列容错 |
| 删除开发文档 | `CTC_DEV_CHECKLIST.md` 校验通过36/36全部真实完成已删除 |
***
## [v6.41.0] - 2026-06-11
### 📝 笔记仓库 — 自动上传/悬浮输入/动态主题/滑动操作/会话置顶
#### 修复
| 变更 | 说明 |
|---|---|
| 笔记内容空白问题 | `_saveContent()` 不再依赖 `pushEnabled` 开关始终自动上传到服务端确保浏览器打开URL可见内容 |
| 笔记加载自动拉取 | `_loadNote()` 本地为空时自动从服务端拉取;已有内容时静默检查远程变更并标记红点 |
| 发现页会话不排序 | `_onSessionTap()` 新增 `updateSessionTime()` 调用,使用过的会话自动排到置顶下方最前 |
#### 变更
| 变更 | 说明 |
|---|---|
| 添加笔记从sheet改为悬浮对话框 | `CtcAddNoteSheet` 改为居中悬浮框,支持毛玻璃效果+缩放动画不再使用底部sheet |
| 笔记列表使用AppSlidable统一组件 | `_buildSlidableItem` 替换原生 `Slidable` 为项目统一的 `AppSlidable`,风格一致 |
| 动态主题替换硬编码颜色 | `CupertinoColors.systemRed``ext.errorColor``CupertinoColors.white``ext.textOnAccent` |
| 设置页底部增加设备限制说明 | 新增 `_buildDeviceLimitNotice` 提示"每个设备最多支持10个笔记" |
#### 变更说明
- 笔记内容空白根因:之前 `_saveContent()` 仅在 `pushEnabled=true` 时上传服务端导致用户输入内容后浏览器打开URL仍为空白。现改为始终自动上传
- 悬浮输入框采用 `showCupertinoDialog` + `ScaleTransition`/`FadeTransition` 动画,配合 `BackdropFilter` 毛玻璃效果更符合iOS风格
- 发现页会话流列表:点击任何会话时更新其 `lastTime``unpinnedSessions``lastTime` 降序排列,使用过的会话自动排到最前
***
## [v6.40.2] - 2026-06-11
### 🔇 日志 — 抑制 liquid_glass_widgets 高频日志 + 静默 VelocityTracker 时间戳乱序错误
#### 修复
| 变更 | 说明 |
|---|---|
| `main.dart` 新增 `_suppressLiquidGlassLogs()` | 将 `lgr` 根 Logger 级别设为 `WARNING`,抑制 FINER/FINE/INFO 级别高频日志 |
| `FlutterError.onError` 新增 VelocityTracker 静默处理 | 静默 `IOSScrollViewFlingVelocityTracker` 时间戳乱序错误Flutter 框架已知 bug |
#### 变更说明
- `liquid_glass_widgets` 包内部使用 `logging` 包的 `Logger('lgr.geometry')` 等记录器,在 debug 模式下每帧输出大量 FINER 级别日志(如 `Rebuilding geometry``Skipping geometry rebuild`),严重影响控制台可读性
- 通过启用 `hierarchicalLoggingEnabled = true` 并设置 `Logger('lgr').level = Level.WARNING`,仅保留 WARNING 及以上级别的 lgr 日志
- `IOSScrollViewFlingVelocityTracker.addPosition` 在 iOS 上偶尔收到时间戳乱序的触摸事件,触发断言错误(`smaller timestamp than predecessor`),这是 Flutter 框架已知 bug不影响滚动功能已静默处理
***
## [v6.40.1] - 2026-06-11
### 🛠 构建 — 修复 macOS Podfile 部署目标版本问题
#### 修复
| 变更 | 说明 |
|---|---|
| macOS Podfile post_install 钩子 | 新增 `MACOSX_DEPLOYMENT_TARGET` 最低版本校验,统一设为 13.0 |
| record_macos 编译错误 | 修复 `auAudioUnit` API 要求 macOS 13.0+ 但 Pod 部署目标低于 13.0 导致编译失败 |
#### 变更说明
- Xcode 27 不再支持 macOS 部署目标低于 12.0,多个 Podflutter_secure_storage、flutter_webrtc、sqflite_darwin 等)默认部署目标为 10.14/10.15/11.0
- record_macos 使用了 macOS 13.0+ 才有的 `auAudioUnit` API因此将最低部署目标统一提升至 13.0
- iOS 构建正常macOS 构建和运行均已验证通过
***
## [v6.40.0] - 2026-06-11
### 🔗 CTC模块 — 新增深度链接(Deep Link)支持
#### 新增功能
| 变更 | 说明 |
|---|---|
| CTC深度链接路由 | 支持 `https://ctc.s2ss.com/<key>` 直接打开对应笔记编辑页 |
| `DeepLinkResolver.resolveCtcDomain` | 新增CTC子域名专用解析方法提取URL路径段作为key参数 |
| iOS Universal Links | Runner.entitlements 添加 `applinks:ctc.s2ss.com` 关联域名 |
| Android App Links | AndroidManifest.xml 添加 `ctc.s2ss.com` intent-filter(autoVerify) |
| Android自定义Scheme | 添加 `xianyan://` scheme intent-filter支持全部深度链接 |
| Android s2ss.com App Links | 添加 `s2ss.com` https intent-filter(autoVerify) |
#### 变更说明
- 用户点击 `https://ctc.s2ss.com/mykey` 链接时App自动打开并导航到 `/ctc/notes/edit?key=mykey`
- CTC笔记编辑路由新增 `deepLinkAliases`: `xianyan://ctc/notes/edit``https://ctc.s2ss.com/*`
- `AppRouter.resolveDeepLinkUri` 新增 `ctc.s2ss.com` 域名判断,优先于 `s2ss.com` 匹配
- 无路径段时(如 `https://ctc.s2ss.com/`回退到CTC笔记列表页
***
## [v6.39.0] - 2026-06-11
### 📝 笔记仓库(CTC)模块 — 新增撤销/重做功能
#### 新增功能
| 变更 | 说明 |
|---|---|
| 新增 `CtcUndoStack` | 撤销/重做历史管理器支持push/undo/redo/clear/trimTo默认最大100条历史 |
| 编辑页集成撤销重做 | `_undo()`/`_redo()` 方法替换为基于 UndoStack 的完整实现,支持光标位置恢复 |
#### 变更说明
- 编辑页工具栏「撤销」「重做」按钮现已可用,之前为简化实现(撤销仅删除选中文本,重做无操作)
- 每次内容变更自动记录历史快照(含光标选区),撤销/重做时恢复文本和光标位置
- 相同内容不重复入栈,超出最大历史数自动移除最旧条目
***
## [v6.38.0] - 2026-06-11
### 📝 笔记仓库(CTC)模块 — 新增云端暂存功能
#### 新增功能
**1. 笔记仓库 — 核心模块**
| 变更 | 说明 |
|---|---|
| 新增 `CtcNoteModel` | 笔记数据模型支持key/content/size/mtime/isStarred/tags/hasRemoteChange |
| 新增 `CtcHistoryModel` | 历史快照模型,仅存储在本地 |
| 新增 `CtcTagModel` | 标签模型,仅存储在本地 |
| 新增 `CtcApiClient` | API客户端封装ctc.s2ss.com所有接口(read/write/info/check/delete) |
| 新增 `CtcLocalStorage` | Hive本地存储管理笔记/历史/标签/设置/最近访问 |
| 新增 `CtcSyncService` | 同步服务支持pull/push/merge + 三方合并算法 + 自动同步 |
| 新增 `CtcNoteListNotifier` | Riverpod Notifier管理笔记CRUD/同步/变更检查 |
| 新增 `CtcSettingsNotifier` | 设置Provider管理所有设置项+持久化 |
| 新增 `CtcExportService` | 导入导出服务支持Markdown/JSON/纯文本格式 |
**2. 笔记仓库 — 页面**
| 变更 | 说明 |
|---|---|
| 新增 `CtcNoteListPage` | 笔记仓库列表页,支持网格/列表/时间线三种布局 |
| 新增 `CtcNoteEditPage` | 笔记编辑页支持Markdown预览切换/自动保存/二维码/历史/导出 |
| 新增 `CtcSettingsPage` | 设置页,包含同步/历史/排版/元数据/安全/显示/使用须知(10条) |
| 新增 `CtcAddNoteSheet` | 添加笔记弹窗URL预览+钥匙校验(2-16位数字字母) |
| 新增 `CtcHistoryPage` | 版本历史页+历史详情页,支持查看/恢复/Diff对比 |
| 新增 `CtcQrScanPage` | 扫码打开笔记页 |
**3. 笔记仓库 — 组件**
| 变更 | 说明 |
|---|---|
| 新增 `CtcMarkdownPreview` | Markdown渲染预览组件 |
| 新增 `CtcQrSheet` | 二维码分享弹窗,支持复制链接/系统分享 |
| 新增 `CtcDiffView` | Diff对比视图行级diff算法高亮变更 |
| 新增 `CtcConflictSheet` | 冲突解决弹窗,选择本地/服务端/合并 |
| 新增 `CtcTagManager` | 标签管理组件,支持添加/删除/筛选 |
**4. 笔记仓库 — 交互特性**
| 变更 | 说明 |
|---|---|
| 右滑操作 | 列表模式下左滑显示:主要/分享/删除 |
| 下拉刷新 | 检查远程变更,红点提示有变更的笔记 |
| 变更红点 | 笔记有远程变更时显示红色脉冲圆点 |
| 骨架屏 | 加载时显示Shimmer骨架屏 |
| 屏幕常亮 | 编辑时可选保持屏幕不熄灭(wakelock_plus) |
| Markdown预览 | 编辑页支持编辑/预览模式切换 |
| 二维码分享 | 编辑页更多操作中显示二维码 |
| 导出功能 | 支持Markdown/JSON/纯文本格式导出到剪贴板 |
| 系统分享 | 列表页滑动/编辑页工具栏支持系统分享 |
**5. 服务端增强**
| 变更 | 说明 |
|---|---|
| 新增JSON API | info/check/delete接口写入支持json参数返回结构化数据 |
| 速率限制 | 每IP每分钟60次请求 |
| 内容审核 | 关键词正则过滤 |
| CORS支持 | 允许跨域请求 |
**6. 发现页入口**
| 变更 | 说明 |
|---|---|
| 新增 `SystemSessionIds.ctcNoteRepo` | 发现页会话列表新增笔记仓库入口 |
| 新增 `sessionCtcNoteRepo` l10n | 14种语言翻译支持 |
| 图标 `CupertinoIcons.doc_text_search` | 系统会话使用CupertinoIcons替代emoji |
**7. 路由注册**
| 变更 | 说明 |
|---|---|
| 新增 `/ctc/notes` | 笔记仓库列表页 |
| 新增 `/ctc/notes/edit` | 笔记编辑页(key参数) |
| 新增 `/ctc/settings` | 笔记设置页 |
**8. 文档与脚本**
| 变更 | 说明 |
|---|---|
| 新增 `API_DOC.md` | CTC API接口文档 |
| 新增 `CTC_DEV_CHECKLIST.md` | 开发清单(5个Phase详细任务) |
| 新增 `upload_ctc_code.py` | SFTP上传脚本 |
| 新增 `test_ctc_api.py` | API测试脚本(12/12通过) |
***
## [v6.37.0] - 2026-06-11
### 🔧 句子来源功能完善 + 拾光Sheet修复