From 0da8906f5dab8e40eb18d9e8dd37aef975282f2d Mon Sep 17 00:00:00 2001 From: Developer Date: Sat, 30 May 2026 05:30:49 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E5=AE=8C=E6=88=90v6.5.58=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E8=BF=AD=E4=BB=A3=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 本次更新包含多项功能优化与bug修复: 1. 新增flutter_keyboard_visibility依赖替代MediaQuery轮询获取键盘状态 2. 添加远程功能标志API支持与FeatureFlag服务 3. 重构壁纸背景渲染组件,统一全局壁纸展示逻辑 4. 延迟初始化壁纸源健康检测至用户同意协议后 5. 修复预测返回/长按预览锁定问题并移除相关配置项 6. 优化日志输出控制,release模式仅保留错误日志 7. 新增进度模块多语言翻译与相关UI字段 8. 优化稍后读功能,取消时同步删除聊天消息 9. 更新权限说明文档,移除冗余的存储写入权限配置 10. 重构部分UI组件减少参数传递,优化性能 --- CHANGELOG.md | 1451 +++-------------- android/app/src/main/AndroidManifest.xml | 10 +- docs/toolsapi/agreements/privacy-policy.html | 92 +- .../api/controller/FeatureFlag.php | 210 +++ docs/toolsapi/application/route.php | 6 + lib/core/layout/app_shell.dart | 51 +- .../services/auth/permission_service.dart | 2 +- .../data/image_cache_metadata_service.dart | 458 ++++++ .../services/data/offline_cache_service.dart | 149 ++ .../feature/feature_flag_provider.dart | 73 + .../feature/feature_flag_service.dart | 321 +++- .../services/post_agreement_initializer.dart | 12 +- lib/core/storage/kv_storage.dart | 93 +- lib/core/utils/logger.dart | 34 +- .../agreements/data/agreement_data.dart | 31 +- .../presentation/daily_card_page.dart | 251 +-- .../presentation/widgets/card_action_bar.dart | 5 +- .../presentation/widgets/card_renderer.dart | 184 ++- .../widgets/card_style_selector.dart | 26 +- .../widgets/content_type_selector.dart | 20 +- lib/features/discover/models/tool_item.dart | 90 +- .../pages/home/inspiration_page.dart | 395 ++++- .../pages/home/inspiration_widgets.dart | 452 +++-- .../providers/inspiration_provider.dart | 83 +- .../home/presentation/favorite_page.dart | 178 +- .../providers/readlater_page.dart | 90 +- .../home/providers/favorite_provider.dart | 582 ++----- .../providers/home_interaction_mixin.dart | 38 +- .../repositories/favorite_repository.dart | 683 ++++++++ .../repositories/readlater_repository.dart | 416 +++++ .../experimental_features_page.dart | 375 +++-- .../general/general_settings_page.dart | 8 +- .../general/general_settings_sections.dart | 4 +- .../presentation/image_cache_page.dart | 671 +++++++- .../plugin/plugin_card_components.dart | 20 +- .../plugin/plugin_pinyin_card.dart | 18 +- .../privacy/data_collection_info_page.dart | 8 +- .../presentation/privacy/log_viewer_page.dart | 23 +- .../theme/theme_sections_style.dart | 264 ++- .../sub/general_fields_provider.dart | 23 +- .../progress/models/progress_models.dart | 129 +- .../presentation/progress_bubble.dart | 748 ++++++--- .../progress_data_management.dart | 272 ++- .../progress/presentation/progress_page.dart | 397 ++++- .../presentation/progress_settings_sheet.dart | 458 ++++-- .../presentation/progress_share_card.dart | 228 ++- .../presentation/progress_sheets.dart | 263 ++- .../progress/providers/progress_provider.dart | 235 ++- lib/l10n/languages/ar.dart | 80 +- lib/l10n/languages/bn.dart | 81 +- lib/l10n/languages/en.dart | 80 +- lib/l10n/languages/es.dart | 83 +- lib/l10n/languages/fr.dart | 81 +- lib/l10n/languages/hi.dart | 80 +- lib/l10n/languages/ja.dart | 79 +- lib/l10n/languages/pt.dart | 81 +- lib/l10n/languages/ru.dart | 82 +- lib/l10n/languages/zh_cn.dart | 79 +- lib/l10n/languages/zh_tw.dart | 79 +- lib/l10n/translation_io_service.dart | 16 +- lib/l10n/types/t.dart | 5 +- lib/l10n/types/t_discover.dart | 52 +- lib/l10n/types/t_progress.dart | 279 ++++ lib/l10n/types/t_root.dart | 9 +- lib/main.dart | 10 +- .../widgets/adaptive/keyboard_safe_sheet.dart | 51 +- .../animation/character_tip_bubble.dart | 24 +- .../containers/wallpaper_background.dart | 117 ++ .../widgets/input/infinite_paged_list.dart | 347 ++++ lib/shared/widgets/widgets.dart | 5 +- pubspec.lock | 16 + pubspec.yaml | 3 + 72 files changed, 9137 insertions(+), 3312 deletions(-) create mode 100644 docs/toolsapi/application/api/controller/FeatureFlag.php create mode 100644 lib/core/services/data/image_cache_metadata_service.dart create mode 100644 lib/core/services/data/offline_cache_service.dart create mode 100644 lib/core/services/feature/feature_flag_provider.dart create mode 100644 lib/features/home/repositories/favorite_repository.dart create mode 100644 lib/features/home/repositories/readlater_repository.dart create mode 100644 lib/l10n/types/t_progress.dart create mode 100644 lib/shared/widgets/containers/wallpaper_background.dart create mode 100644 lib/shared/widgets/input/infinite_paged_list.dart diff --git a/CHANGELOG.md b/CHANGELOG.md index 99500925..4c886624 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,1263 +4,350 @@ *** -## [v6.5.127] - 2026-05-30 +## [v6.6.144] - 2026-05-30 -### 🐛 纠错页面布局修复 + 壁纸按钮提示优化 (优先级2) +### 🔧 批量架构优化与功能完善 (10项) -**修复:** -- 📝 **内容ID标签与info图标布局修复** — "内容ID"文字与info图标从Column改为Row排列,info图标正确显示在标签右侧 -- 📝 **纠错描述placeholder增加字数提示** — placeholder从"请详细描述需要纠正的内容..."改为"请详细描述需要纠正的内容(至少10字)..." -- 📝 **纠错描述标签与提示文字布局修复** — "纠错描述"标签与"请至少描述10个字"提示从Column改为Row排列 -- 🏷️ **纠错记录来源标识优化** — 本地记录使用📱标识,服务端记录使用☁️标识,更直观区分数据来源 +**性能优化:** +- ⚡ **动画性能优化** — `_LiveCountdownGrid` 用 `ValueNotifier` + `ValueListenableBuilder` 替代空 `setState`,避免每秒全量重建;`CharacterTipBubble` 用 `ref.watch.select` 精确订阅 `currentTip`/`isExpanded`,避免 `enabledCategories` 变更触发重建;`ProgressPage` 用 `select` 精确订阅 `isLoading`/`systemItems`/`userItems` -**优化:** -- 🖼️ **壁纸下载按钮提示优化** — toast从"暂无版权授权,无法进行此操作"改为"暂无版权授权,无法下载" -- 🖼️ **壁纸编辑按钮提示优化** — toast从"暂无版权授权,无法进行此操作"改为"暂无版权授权,无法编辑" +**架构重构:** +- 🏗️ **Repository模式统一双数据源** — 新增 `ReadLaterRepository` + `FavoriteRepository`,封装 Feed API + ChatMessage + Legacy API + 本地收藏多数据源逻辑,`FavoriteNotifier` 委托给 Repository,Notifier 只管理 UI 状态 +- 🏗️ **错误边界统一包裹** — 在 `app_shell.dart` 中统一用 `AppErrorBoundary` 包裹 `widget.child`,所有页面自动受到渲染异常保护 -**修改文件:** -- `lib/features/correction/presentation/correction_page.dart` — 内容ID布局修复、placeholder字数提示、纠错记录📱/☁️标识 -- `lib/features/template/presentation/widgets/wallpaper_preview_sheet.dart` — 下载/编辑按钮toast提示优化 +**安全加固:** +- 🔒 **生产环境日志清理** — `logger.dart` 新增 `_isDebugMode` 编译期常量,release 模式下 `Log.d/i/w` 静默返回,仅 `Log.e/f` 输出,杜绝敏感信息泄露 +- 🔑 **KV存储键命名空间** — `StorageKeys` 新增15个命名空间前缀 + `namespaced()` 方法 + 20+个带 `ns` 前缀的 getter,新代码推荐使用命名空间键 + +**功能新增:** +- 📴 **离线数据预缓存** — 新增 `OfflineCacheService`,WiFi 时预缓存首页句子/收藏,支持 TTL 过期检测/缓存清理 +- 📦 **无限滚动分页组件** — 新增 `InfinitePagedList` + `RefreshablePagedList` + `PagedListController`,纯 Flutter SDK 实现 +- ⌨️ **键盘可见性监听** — 集成 `flutter_keyboard_visibility ^6.0.0`,`KeyboardManager` 从 MediaQuery 轮询改为平台事件驱动 +- 🏷️ **收藏标签** — 收藏条目新增"添加标签"功能,支持多标签(逗号分隔),标签存储到 KvStorage +- 📤 **收藏导出** — 新增导出收藏功能,支持文本/JSON/CSV 三种格式,复制到剪贴板 + +**修改文件(15+):** +- `lib/features/progress/presentation/progress_bubble.dart` — ValueNotifier 替代空 setState +- `lib/features/progress/presentation/progress_page.dart` — select 精确订阅 +- `lib/shared/widgets/animation/character_tip_bubble.dart` — select 精确订阅 +- `lib/core/layout/app_shell.dart` — AppErrorBoundary 统一包裹 +- `lib/features/home/repositories/readlater_repository.dart` — 新增稍后读仓库 +- `lib/features/home/repositories/favorite_repository.dart` — 新增收藏仓库 +- `lib/features/home/providers/favorite_provider.dart` — 委托给 Repository +- `lib/core/utils/logger.dart` — release 模式日志静默 +- `lib/core/storage/kv_storage.dart` — 命名空间前缀系统 +- `lib/core/services/data/offline_cache_service.dart` — 新增离线缓存服务 +- `lib/shared/widgets/input/infinite_paged_list.dart` — 新增分页组件 +- `lib/shared/widgets/adaptive/keyboard_safe_sheet.dart` — flutter_keyboard_visibility 集成 +- `lib/features/home/presentation/favorite_page.dart` — 标签+导出功能 +- `pubspec.yaml` — 新增 flutter_keyboard_visibility ^6.0.0 *** -## [v6.5.126] - 2026-05-30 +## [v6.6.143] - 2026-05-30 -### 🎨 闲情逸致Sheet热力图+信息列表排版重构 (优先级2) - -**重构:** -- 📊 **热力图重构为日历网格布局** — 替换单行横向滚动为7列×N行日历网格,格子自适应宽度,无需横向滚动 -- 📊 **热力图格子增大** — 从10px固定尺寸改为响应式自适应,内显日期数字,更易阅读 -- 📊 **热力图标题层次优化** — 月份+分类标签+年份三层视觉层次,分类标签使用accent色胶囊 -- 📊 **热力图增加星期表头** — 一~日表头,周末使用accent色标识 -- 📊 **热力图今日高亮** — 当日格子2px accent色边框+加粗字体 -- 📊 **热力图图例优化** — 格子从8px增大到12px,间距更清晰 -- 📋 **信息列表分割线修复** — 移除硬编码`72+8+14+8`,改用`_leadingWidth + AppSpacing.md`语义化计算 -- 📋 **信息列表分割线颜色统一** — 使用`ext.dividerOnCard`替代`ext.textHint.withValues(alpha: 0.08)` -- 📋 **信息行布局重构** — leading区域(图标+标签)统一为88px固定宽度,value右对齐 - -**修改文件:** -- `lib/features/tool_center/leisure/presentation/widgets/leisure_heatmap.dart` — 日历网格布局重构 -- `lib/features/tool_center/leisure/presentation/widgets/leisure_card_detail_sheet.dart` — 信息列表排版优化+分割线修复 - -*** - -## [v6.5.125] - 2026-05-30 - -### 🔒 外部跳转确认弹窗统一修复 (优先级1) - -**修复:** -- 🔒 **外部链接跳转统一确认** — 所有 `launchUrl` 直接调用改为通过 `ExternalLinkDialog.launchWithConfirm` 确认弹窗,防止用户误触跳转外部应用 -- 🔒 **本地文件打开确认** — 打开本地文件(PDF/图片/文档等)前增加确认弹窗,防止误操作 -- 🔍 **举一反三排查** — 搜索项目中所有 `launchUrl` 调用,逐一判断是否需要确认弹窗 - -**修改文件:** -- `lib/features/mine/profile/presentation/learn_us_widgets.dart` — `launchAboutUrl` 改用 `ExternalLinkDialog.launchWithConfirm`,移除 `url_launcher` 直接依赖 -- `lib/features/mine/profile/presentation/learn_us_sections.dart` — 调用方传入 `BuildContext` 参数 -- `lib/features/mine/profile/presentation/about_page.dart` — 华为应用商店评价链接改用 `ExternalLinkDialog`,移除 `url_launcher` 直接依赖 -- `lib/features/auth/presentation/login_page.dart` — Web登录浏览器链接改用 `ExternalLinkDialog`,替换 `url_launcher` 导入 -- `lib/features/discover/presentation/pages/document_preview_page.dart` — HTTP链接用 `ExternalLinkDialog`,本地文件打开添加确认弹窗 -- `lib/features/discover/presentation/widgets/chat_bubble/chat_file_bubble.dart` — 本地文件打开添加确认弹窗,移除多余 material 导入 -- `lib/features/discover/presentation/widgets/chat_bubble/chat_document_bubble.dart` — 本地文件打开添加确认弹窗 -- `lib/features/file_transfer/presentation/pages/transfer_chat_file_send.dart` — 本地文件打开添加确认弹窗 -- `lib/features/file_transfer/presentation/pages/transfer_chat_media_content.dart` — 媒体文件打开/保存添加确认弹窗 -- `lib/features/file_transfer/presentation/pages/transfer_chat_file_content.dart` — 本地文件打开添加确认弹窗 - -**不需要修改:** -- `lib/core/services/search/search_engine_service.dart` — 用户主动搜索,无需额外确认 -- `lib/shared/widgets/feedback/share_sheet.dart` — 用户主动分享,无需额外确认 -- `lib/features/discover/presentation/widgets/chat_bubble/chat_link_bubble.dart` — 已使用 `ExternalLinkDialog` - -*** - -## [v6.5.124] - 2026-05-30 - -### 📖 稍后读图片视频空白修复 + 发送确认弹窗 (优先级2) - -**修复:** -- 🖼️ **图片缩略图空白修复** — `_buildImageThumbnail` 增加 `ConnectionState.waiting` 加载状态,路径解析期间显示 CupertinoActivityIndicator 而非空白 -- 🔄 **fallback 机制** — 缩略图方法新增 `fallbackPath` 参数,主路径加载失败自动尝试备用路径 -- 📝 **错误日志增强** — 网络加载/本地加载/路径解析/文件不存在等场景添加 Log.w/Log.e 日志,便于排查 -- 🖼️ **图片条目优先使用 thumbnailPath** — 缩略图更小更可靠,加载更快,imagePath 作为 fallback -- 🎬 **视频条目 clipBehavior 修复** — Container 添加 `Clip.antiAlias`,缩略图不再溢出圆角 +### 📦 新增组件:无限滚动分页组件 (优先级3) **新增:** -- 💬 **稍后读发送确认对话框** — `toggleReadLater` 成功后弹出 CupertinoAlertDialog 确认提示(添加/移出均有反馈) -- 使用 `rootNavigatorKey` 在 Notifier 中安全弹出对话框 - -**修改文件:** -- `lib/features/home/presentation/providers/readlater_page.dart` — 缩略图加载增强 -- `lib/features/home/providers/home_interaction_mixin.dart` — 稍后读确认弹窗 - -*** - -## [v6.5.123] - 2026-05-30 - -### 🏗️ 工具面板15项架构重构与功能扩展 (优先级1) - -**Phase 1 架构基础:** -- 🏗️ **动画配置类** `ToolPanelAnimConfig` — 抽取所有硬编码动画参数,支持主题化 (#5) -- 🔓 **ToolPanelOverlayRoute 公开化** — 支持外部测试和复用 (#15) -- 📦 **DragState 封装** `ToolPanelDragState` — 替代4个分散的抽象方法 (#12) -- 🗺️ **导航配置数据驱动** `ToolNavConfig` — 26+个switch-case转为数据驱动 (#8) -- 🔗 **Mixin链保留** — 泛型Mixin方案稳定,暂不改为组合模式 (#9) - -**Phase 2 代码质量:** -- 🔄 **GridView去重** — 抽取 `buildToolGrid` 公共方法 (#10) -- 🔄 **回调简化** — `_ToolGridCallbacks` 封装,消除childWhenDragging/child重复 (#11) -- 🛡️ **错误边界** — 工具跳转失败用户友好提示 + 离线/维护状态拦截 (#13) - -**Phase 3 UX打磨:** -- 🌊 **弹性回弹动画** — dismissOffset使用easeOutCubic平滑归零 (#14) -- ♿ **Semantics无障碍** — 工具网格项/头部/分类/垃圾桶/搜索空状态全覆盖 (#6) -- 📌 **工具状态视觉指示** — 离线工具半透明+wifi_slash角标 - -**Phase 4 新功能:** -- ⭐ **收藏工具专区** — favoritedTools展示区域 + 长按收藏操作 (#1) -- 📊 **工具使用统计面板** `ToolStatsSheet` — 使用次数/趋势/评分/版本 (#2) -- 📤 **工具分享功能** — 接入share_plus系统分享,替代Toast提示 (#3) -- 📦 **工具版本管理** — ToolItem添加version/changelog/updatedAt字段 + 版本详情弹窗 (#7) +- 📦 **InfinitePagedList** — 本地化无限滚动分页组件,参考 infinite_scroll_pagination 核心设计,纯 Flutter SDK 实现 + - `PagedListController` — 分页控制器,管理分页状态/数据/页码/错误信息 + - `PagedStatus` — 6种状态枚举(initial/loading/refreshing/loadingMore/success/error) + - `InfinitePagedList` — 无限滚动列表 Widget,自动根据状态渲染不同UI + - `RefreshablePagedList` — 带下拉刷新的无限滚动列表,集成 CupertinoSliverRefreshControl + - 滚动距底部200px自动触发加载更多 + - 支持自定义 loading/error/empty/loadingMore 构建器 + - 支持分隔线(separatorBuilder)、首次加载/刷新/加载更多/重试/清空 + - 默认使用 CupertinoActivityIndicator,风格与项目统一 + - 使用项目设计令牌(AppSpacing/AppRadius/AppTypography/AppTheme) **新增文件:** -- `tool_panel_config.dart` — 动画配置类 -- `tool_panel_drag_state.dart` — 拖拽状态封装 -- `tool_stats_sheet.dart` — 使用统计弹窗 +- `lib/shared/widgets/input/infinite_paged_list.dart` -**模型变更:** -- `ToolItem` 新增 `navConfig`/`version`/`changelog`/`updatedAt` 字段 -- 新增 `ToolNavConfig`/`ToolNavType` 数据类 -- `defaultTools` 全部45个工具已配置navConfig +**修改文件:** +- `lib/shared/widgets/widgets.dart` — 新增导出 infinite_paged_list *** -## [v6.5.122] - 2026-05-30 +## [v6.6.142] - 2026-05-30 -### 🧭 defaultTools 导航配置数据驱动 — 添加 navConfig 字段 (优先级3) +### ⌨️ 架构优化:集成flutter_keyboard_visibility替换MediaQuery轮询 (优先级3) -- 🧭 **为 defaultTools 所有 ToolItem 添加 navConfig 导航配置** (`lib/features/discover/models/tool_item.dart`) - - 汉字类工具(8个):hanzi_query/chengyu/zuci/cidian/jinyici/juzi/danci/suoxie → `ToolNavConfig.hanzi()` - - 列表类工具(24个):poetry/jiufang/drug/food_clash/herbal/pianfang/tisana/changshi/xiehouyu/riddle/brainteaser/couplet/wisdom/saying/lyric/story/zuowen/why/zgjm/joke/illness/surname/jieqi/nation → `ToolNavConfig.list()` - - 计算器类工具(1个):unit_temp → `ToolNavConfig.calc(calcId: 'unit_temp')` - - 内建功能(1个):stats → `ToolNavConfig.builtin()` - - 直接路由跳转(11个):card_maker/nick_gen/pomodoro/ocr/clipboard/history/classics/health/game_center/article_square/content_check → `ToolNavConfig.route()` - - china_colors 不添加 navConfig,使用默认 route 跳转 - - 修复 `ToolNavConfig.route()` 和 `ToolNavConfig.builtin()` 构造函数:改用 `: this(type: ...)` 委托主构造函数,解决 final 字段未初始化错误 +**新增:** +- ⌨️ **flutter_keyboard_visibility ^6.0.0** — 新增依赖,提供平台级键盘可见性监听 +- ⌨️ **KeyboardManager.keyboardVisibilityStream** — 流式键盘可见性变更,支持StreamSubscription监听 +- ⌨️ **KeyboardManager.isKeyboardVisibleSync** — 同步获取键盘可见状态,无需BuildContext + +**修改:** +- ⌨️ **KeyboardManager.isKeyboardVisible** — 从 `MediaQuery.of(context).viewInsets.bottom > 0` 改为 `KeyboardVisibilityController.isVisible`,消除轮询开销 +- ⌨️ **KeyboardSafe.isKeyboardVisible** — 同步改用 `KeyboardVisibilityController` +- ⌨️ **ManagedCupertinoTextField** — 从 FocusNode.addListener 改为 KeyboardVisibilityController.onChange Stream 监听键盘状态变化 +- ⌨️ **KeyboardManager.keyboardHeight** — 保留 MediaQuery(flutter_keyboard_visibility不提供高度数据) + +**修改文件:** +- `pubspec.yaml` +- `lib/shared/widgets/adaptive/keyboard_safe_sheet.dart` *** -## [v6.5.121] - 2026-05-30 +## [v6.6.142] - 2026-05-30 -### 🌐 引导页多语言切换 + 数据收集信息页面 (优先级2) +### 🏗️ 架构优化:StorageKeys 命名空间前缀系统 (优先级3) -- 🌐 **引导页语言Chip实际切换应用语言** (`lib/features/onboarding/presentation/pages/welcome_page.dart`) - - 语言Chip点击时,除设置onboardingProvider.selectedLocale外,同时调用generalSettingsProvider.setLanguage()实际切换应用语言 - - 新增_onboardingToAppLocaleId映射表,将引导页语言代码映射到AppLocale ID(如zh→zh_CN) - - 切换后UI立即更新,通过appLocaleProvider自动响应 +**新增:** +- 🏗️ **StorageKeys 命名空间前缀** — 为存储键添加统一命名空间管理,防止键名冲突 + - 新增 15 个命名空间前缀常量 (`_nsApp`, `_nsTheme`, `_nsAuth`, `_nsHome` 等) + - 新增 `namespaced()` 方法,生成格式如 `home.shake_enabled` 的带前缀键 + - 新增 `toolDelKey()` 方法,生成带动态 ID 的工具删除键 + - 新增 20+ 个带 `ns` 前缀的 getter(如 `nsHomeShakeEnabled`, `nsAuthToken`) + - 现有键常量保持不变,确保向后兼容 -- 🔍 **引导页新增"了解我们收集的信息"按钮** (`welcome_page.dart`) - - _buildPermissionEntry改为Row双按钮布局 - - 左侧:"了解软件权限"(已有),导航到权限管理页 - - 右侧:"了解我们收集的信息"(新增),导航到数据收集信息页 - - 两个按钮等宽Expanded,样式统一(accent色边框+半透明背景+图标+文字) - -- 🔍 **新建数据收集信息页面** (`lib/features/mine/settings/presentation/privacy/data_collection_info_page.dart`) - - iOS风格 CupertinoPageScaffold + CupertinoNavigationBar - - 导航栏标题"🔍 了解我们收集的信息" - - 数据说明介绍卡片(GlassContainer) - - 8个数据分类卡片:👤账户信息/📝个人资料/📱设备信息/📊使用行为/📍位置信息/💾本地存储/☁️云端存储/🛡️不收集的信息 - - 每个分类包含:emoji图标+名称+数据项标签列表+收集方式+风险等级指示器 - - 风险等级:高(红)/中(橙)/低(绿)/无(灰),带圆点+文字Badge - - "您的权利"区域:访问权/更正权/删除权/导出权/撤回同意权 - - 底部声明说明 - -- 🔧 **路由注册** (`lib/core/router/app_routes.dart`, `lib/core/router/settings_routes.dart`) - - AppRoutes 新增 `dataCollectionInfo = '/data-collection-info'` - - settings_routes.dart 新增 data-collection-info GoRoute +**修改文件:** +- `lib/core/storage/kv_storage.dart` *** -## [v6.5.120] - 2026-05-30 +## [v6.6.142] - 2026-05-30 -### 🧪 实验中的功能页面 — 替换调试模式开关 (优先级2) +### 🔒 安全:生产环境日志级别控制 (优先级4) -- 🧪 **新建实验中的功能页面** (`lib/features/mine/settings/presentation/experimental_features_page.dart`) - - iOS风格 CupertinoPageScaffold + CupertinoNavigationBar - - CupertinoSlidingSegmentedControl 双Tab切换:预览中的功能 | 问题列表 - - 预览中的功能Tab:功能卡片列表(emoji图标+名称+描述+状态标签+进度条) - - 6个示例功能数据:AI智能摘要/主题商店/阅读报告/跨设备同步/语音朗读/桌面小组件 - - 问题列表Tab:问题项列表(描述+严重程度+状态标签) - - 筛选Chips:全部/待修复/修复中/已修复 - - 使用 AppThemeExtension/AppTypography/AppSpacing/AppRadius/GlassContainer 设计系统 - - 进度条使用渐变填充(accent→accentLight) - - 状态标签使用语义化颜色(infoColor/warningColor/successColor/errorColor) +**修改:** +- 🔒 **Log.d / Log.i / Log.w** — release 模式下不再输出,防止敏感信息泄露 +- 🔒 **Log.e / Log.f** — 始终输出,错误必须记录 +- 🔒 **appLogger** — release 模式下 Level 设为 error,开发模式保持 debug +- 🔒 新增 `_isDebugMode` 编译期常量,利用 `assert` 技巧区分 debug/release -- 🔧 **个人中心页面修改** (`lib/features/mine/profile/presentation/profile_page.dart`) - - 调试模式开关行替换为"实验中的功能"导航行 - - 图标从 hammer_fill 改为 flask_fill(实验瓶图标) - - 移除 _DebugSwitch trailing,添加 onTap 导航到实验中的功能页面 - - 保留 _DebugSwitch 类定义(可能其他地方还在用) - -- 🔧 **路由注册** (`lib/core/router/app_routes.dart`, `lib/core/router/settings_routes.dart`) - - AppRoutes 新增 `experimentalFeatures = '/settings/experimental-features'` - - settings_routes.dart 新增 experimental-features GoRoute +**修改文件:** +- `lib/core/utils/logger.dart` *** -## [v6.5.120] - 2026-05-30 +## [v6.6.141] - 2026-05-30 -### 🖼️ 图片缓存管理页面 (优先级2) +### 🏗️ 架构重构:收藏数据仓库 (优先级3) -- 🖼️ **新建 ImageCachePage 图片缓存管理页面** (`lib/features/mine/settings/presentation/image_cache_page.dart`) - - CupertinoPageScaffold + CupertinoNavigationBar,标题"🖼️ 图片缓存管理" - - 导航栏trailing视图切换按钮:网格/列表模式切换 - - 存储概览区域:总缓存大小、文件数、Feed缓存条数、使用进度条 - - 缓存占比区域:近期缓存(7天内)/ 过期缓存(7天前)分类统计+进度条 - - 缓存文件网格/列表视图:缩略图预览、文件名、大小、过期标记 - - 长按单个文件可删除 - - 操作区域:清除过期缓存、清除全部缓存(带确认弹窗) - - 下拉刷新支持 - - 使用 GlassContainer / AppTheme / AppTypography / AppSpacing / AppRadius 设计系统 - - 使用 CupertinoIcons 图标 +**新增:** +- 🏗️ **FavoriteRepository** — 统一收藏数据访问层,从 `favorite_provider.dart` 抽取多源逻辑 + - 封装 Feed API + Legacy API + 本地收藏三数据源 + - 对外暴露 `fetchFavorites`/`toggleFavorite`/`syncFavorites` 等方法 + - 内部自动处理 Feed API 优先 + 降级旧接口 + 本地收藏 + - 使用 Riverpod Provider (`favoriteRepositoryProvider`) 提供实例 + - 新增 `FavoriteLoadResult` 模型,解耦加载结果与UI状态 + - 同步方法支持 `onProgress` 回调,替代原 state 同步方式 -- 🔧 **DataCategory 模型扩展** (`data_management_widgets.dart`) - - DataCategory 新增可选 `onTap` 参数 - - DataCategoryRow 支持 onTap 导航:整行点击触发 onTap,有 onTap 时显示独立"清除"按钮 - -- 🔧 **数据管理页面导航** (`data_management_page.dart`) - - 图片缓存行增加 onTap 导航到 ImageCachePage (`/settings/image-cache`) - - 点击行导航到详情页,点击"清除"按钮执行清除操作 - -- 🔧 **路由注册** (`app_routes.dart`, `settings_routes.dart`) - - AppRoutes 新增 `imageCache = '/settings/image-cache'` - - settings_routes.dart 新增 image-cache GoRoute +**新增文件:** +- `lib/features/home/repositories/favorite_repository.dart` *** -## [v6.5.119] - 2026-05-30 +## [v6.6.140] - 2026-05-30 -### 📋 协议页面联系信息更新 (优先级2) +### 💡 灵感页面 + 进度页面 29项功能实施 (优先级1-5) -- 📧 **邮箱修正**:所有11个协议HTML文件中,将 `21981550@qq.com` 替换为 `2821981550@qq.com` -- 📧 **增加邮箱**:在主邮箱后增加 `2572560133@qq.com`(页脚区域和DATA对象) -- 📋 **增加ICP号**:页脚公司信息区域增加 `滇ICP备2022000863号-18A` -- 🔄 **switchLang函数**:增加 `footer-icp` 元素的动态切换支持 -- 📝 **DATA对象**:zh/en 均增加 `icp` 字段 -- ⚠️ **网站替换**:`tools.wktyl.com` 在协议文件中未发现,无需替换 -- 影响文件:index.html、privacy-policy.html、user-service-agreement.html、account-agreement.html、member-benefits.html、disclaimer.html、children-privacy.html、permission-usage.html、app-introduction.html、beginner-guide.html、dev-team.html +**灵感页面功能:** +- 🔖 **#1 收藏/书签** — InspirationSentence新增isFavorited字段,接入FavoriteNotifier本地收藏存储,列表/网格卡片增加书签图标,详情弹窗收藏按钮动态样式 +- 🔗 **#2 分享功能** — InspirationDetailSheet集成ShareSheet,支持句子分享(ShareScene.sentence) +- 🎴 **#3 卡片生成** — 详情弹窗"制作卡片"按钮接入ShareSheet(ShareScene.card)+DailyCardStyle +- 📄 **#4 分页加载/无限滚动** — InspirationState新增page/hasMore字段,loadMore()方法,pageSize=8分页,底部"加载更多"指示器 +- 🔄 **#5 下拉刷新增强** — 轻拉30px触发刷新(区别于重拉80px工具中心),1200ms冷却防抖,触觉反馈 + +**进度页面功能:** +- 📂 **#13 进度分组** — groupByType开关,timeline按ProgressItemType分组显示emoji类型头 +- 🔀 **#18 智能排序** — ProgressSortMode枚举(自定义/按紧急度/按日期/按类型),排序选择器UI +- 📋 **#14 进度模板** — 8个预设模板(考研/生日/年底目标/项目上线/婚礼/旅行/读书/健身),一键填充表单 +- 📝 **#15 进度笔记** — ProgressItem新增note字段,添加表单笔记输入,气泡展示笔记内容 +- 📈 **#16 进度历史** — ProgressHistoryPoint模型,refresh时自动记录历史快照(每小时) +- 🏁 **#17 多维度里程碑** — ProgressMilestone模型(label/targetDate/emoji/isReached),addMilestone方法,气泡展示里程碑行 + +**数据管理:** +- 💾 **#19 数据导入/导出** — 设置页新增JSON导出到剪贴板+从剪贴板导入JSON,JsonEncoder格式化 + +**多语言:** +- 🌐 **favorited翻译** — 11种语言新增favorited字段翻译 + +**代码质量:** +- 🧹 **Flutter analyze修复** — 移除冗余参数(avoid_redundant_argument_values)、添加const(prefer_const_constructors/prefer_const_declarations) + +**修改文件:** +- `lib/features/discover/providers/inspiration_provider.dart` — 收藏/分页/刷新状态管理 +- `lib/features/discover/presentation/pages/home/inspiration_page.dart` — 下拉刷新/分页加载UI +- `lib/features/discover/presentation/pages/home/inspiration_widgets.dart` — 收藏/分享/卡片按钮 +- `lib/features/progress/models/progress_models.dart` — note/milestones/history模型 +- `lib/features/progress/providers/progress_provider.dart` — 分组/排序/历史/里程碑 +- `lib/features/progress/presentation/progress_bubble.dart` — 笔记/里程碑展示 +- `lib/features/progress/presentation/progress_sheets.dart` — 模板选择器/笔记输入 +- `lib/features/progress/presentation/progress_page.dart` — 排序选择器UI +- `lib/features/progress/presentation/progress_settings_sheet.dart` — 数据导入/导出 +- `lib/l10n/types/t_discover.dart` — favorited字段 +- `lib/l10n/translation_io_service.dart` — favorited导入 +- 11种语言文件 — favorited翻译 *** -## [v6.5.118] - 2026-05-30 +## [v6.6.139] - 2026-05-30 -### 🏗️ 工具面板代码架构拆分重构 (优先级2) +### 🔧 批量Bug修复与功能完善 (优先级1-5) -- 🏗️ **tool_panel.dart 拆分为6个文件**(原1431行 → 每文件≤403行) - - `tool_panel.dart` — 主入口 + 动画状态核心(~403行) - - `tool_panel_intro.dart` — 工具介绍数据模型与常量(~80行) - - `tool_panel_widgets.dart` — 独立小组件(ActionItem/DragFeedback)(~100行) - - `tool_panel_navigator.dart` — 导航Mixin + 纯函数配置映射(~400行) - - `tool_panel_actions.dart` — 操作Mixin(长按/介绍/删除)(~200行) - - `tool_panel_sections.dart` — UI区块Mixin(头部/分类/搜索/垃圾桶)(~400行) - - 使用泛型Mixin `` 解决ConsumerState泛型冲突 - - 私有类公开化:`_ToolIntro`→`ToolIntro`、`_ActionItem`→`ToolActionItem`、`_DragFeedback`→`ToolDragFeedback` - - 导航配置抽取为纯函数 `ToolPanelNavHelper`,便于单元测试 - - flutter analyze 零错误零警告通过 +**Bug修复:** +- 🔧 **#1 AndroidManifest自启动** — 已通过`tools:node="remove"`移除WorkManager RescheduleReceiver,防止BOOT_COMPLETED触发自启动 +- 🔧 **#4 非主页摇一摇误触发** — ShakeDetector已有路由作用域检查,仅`/home`路由允许触发 +- 🔧 **#7 稍后读句子不显示** — 修复`_loadItems`的`if(_isLoading)return`守卫丢弃刷新事件;修复跨数据源去重逻辑(Feed API id为数字字符串,聊天消息id为UUID);修复取消稍后读时聊天消息未同步删除 +- 🔧 **#8 稍后读图片视频空白** — `_buildImageThumbnail`的FutureBuilder新增loading状态显示CupertinoActivityIndicator;新增fallbackPath备用路径;图片条目优先使用thumbnailPath +- 🔧 **#9 闲情逸致sheet热度排版** — 热力图从单行横向滚动重构为日历网格7列×N行;格子尺寸从10px增大到响应式36-42px;新增星期表头;信息列表分割线消除硬编码 +- 🔧 **#10 我的收藏不显示** — 修复Feed API降级逻辑(空结果时主动降级到旧接口);修复createtime字符串排序改为数值比较;新增未登录时本地收藏加载 +- 🔧 **#10.1 收藏页面输入法自动弹出** — 集成KeyboardManager,延迟canRequestFocus 500ms +- 🔧 **#11 设备页面时间/IP被遮住** — DeviceInfoRow的value textAlign改为start,移除maxLines限制,crossAxisAlignment改为start +- 🔧 **#20 精灵气泡秒消失** — CharacterTipBubble始终渲染组件,通过opacity/offset控制可见性,修复退出动画不生效问题 + +**功能完善:** +- 💬 **#8.1 稍后读发送后弹对话框** — toggleReadLater成功后弹出CupertinoAlertDialog确认提示 +- 🔒 **#9.1 外部跳转确认弹窗** — 举一反三修复12个文件,统一使用ExternalLinkDialog.launchWithConfirm或添加确认弹窗 +- 📝 **#12 内容纠错增强** — 内容ID旁增加info图标+弹窗提示;纠错描述placeholder增加最少10字提示;纠错记录增加📱本地/☁️服务端标识 +- 🚫 **#14 壁纸模板按钮** — 下载/编辑按钮toast改为"暂无版权授权,无法下载/编辑" +- 📖 **#21 拼音注音icon** — 右下角icon改为CupertinoIcons.book_fill,点击弹出汉语拼音注音介绍对话框 +- 🔒 **#18 预测返回/长按预览** — 默认关闭且锁定不可打开(fromStorage强制false + setter加锁) +- 🖼️ **#19 主题壁纸/背景** — 从空壳到完整可用:在线壁纸+渐变预设+纯色背景+相册选择+WallpaperBackground渲染组件+app_shell集成 + +**页面重设计:** +- 🎴 **#13 日签卡片** — LayoutBuilder自适应高度+底部统一GlassContainer面板+动态主题+动态圆角 +- 💡 **#15 灵感页面** — 全面重写:CupertinoNavigationBar+动态主题+动态圆角+消除硬编码颜色+GlassContainer层次 +- 📊 **#16 进度页面** — 完善显示样式(emoji头像/倒计时实时更新/进度条动画/概览卡片)+数据管理(loading修复/持久化增强/空指针防护)+分享功能(复制文本/分享卡片视觉) + +**权限与合规:** +- 🔒 **#22 引导页权限** — PostAgreementInitializer已确保协议同意后才初始化权限敏感服务,main.dart无提前使用权限 +- 📋 **#23 存储权限分析** — WRITE_EXTERNAL_STORAGE已移除(maxSdk=29仅影响Android 9,Dart层未主动请求);READ_EXTERNAL_STORAGE(maxSdk=32)保留 + +**修改文件(30+):** +- `lib/features/home/presentation/providers/readlater_page.dart` — 稍后读刷新/去重/图片修复 +- `lib/features/home/providers/home_interaction_mixin.dart` — 稍后读确认弹窗+取消同步删除 +- `lib/features/home/providers/favorite_provider.dart` — 收藏降级/本地加载 +- `lib/features/home/presentation/favorite_page.dart` — 收藏排序/输入法控制 +- `lib/features/mine/user_center/presentation/devices/device_detail_sheet.dart` — 设备信息布局 +- `lib/features/correction/presentation/correction_page.dart` — 纠错增强 +- `lib/features/template/presentation/widgets/wallpaper_preview_sheet.dart` — 壁纸按钮提示 +- `lib/features/mine/settings/presentation/plugin/plugin_pinyin_card.dart` — 拼音icon+对话框 +- `lib/features/mine/settings/providers/sub/general_fields_provider.dart` — 预测返回/长按预览锁定 +- `lib/features/daily_card/presentation/daily_card_page.dart` — 日签卡片重设计 +- `lib/features/discover/presentation/pages/home/inspiration_page.dart` — 灵感页面重写 +- `lib/features/progress/presentation/progress_page.dart` — 进度页面完善 +- `lib/features/mine/settings/presentation/theme/theme_sections_style.dart` — 壁纸/背景完善 +- `lib/shared/widgets/animation/character_tip_bubble.dart` — 气泡退出动画修复 +- `lib/shared/widgets/containers/wallpaper_background.dart` — 新增壁纸背景组件 +- `lib/core/layout/app_shell.dart` — 集成壁纸背景 +- 以及其他12+个外部跳转确认弹窗修复文件 *** -## [v6.5.117] - 2026-05-30 +## [v6.6.138] - 2026-05-30 -### 🎨 灵感页面 iOS 26 风格重设计 (优先级1) +### 🖼️ 壁纸/背景功能完善 — 从空壳到完整可用 (优先级1) -- 🎨 **灵感页面全面重设计** (`lib/features/discover/presentation/pages/home/inspiration_page.dart`) - - 新增 CupertinoNavigationBar,标题"💡 灵感",trailing 视图切换按钮 - - 视图切换按钮使用 AnimatedContainer + AnimatedSwitcher,CupertinoIcons 图标替代 emoji - - 切换视图模式添加 HapticFeedback.selectionClick() 触觉反馈 - - 快捷入口行重设计:使用 GlassContainer(Liquid Glass) + accent 色圆形 emoji 容器 - - 分类筛选行重设计:AnimatedContainer + 选中态 border 高亮,平滑过渡动画 - - 列表模式卡片增强:分类标签使用 accent 色背景 pill,作者行添加 person 图标 - - 网格模式卡片增强:分类标签使用半透明白色 pill,右上角圆形点赞按钮 - - 详情 BottomSheet 增加分类标签显示,作者/来源使用图标+文字行 - - 空状态重设计:GlassContainer 包裹 emoji,添加副标题提示 - - 刷新按钮添加 CupertinoIcons.refresh 图标 - - AnimatedSwitcher 包裹列表/网格切换,平滑过渡动画 - - 所有颜色使用 AppTheme.ext(context) 动态主题 - - 所有圆角使用 AppRadius / AppRadius.of(context) 动态样式 - - 所有间距使用 AppSpacing 统一令牌 - - 修复翻译类型:`dynamic t` → `T t`,消除类型安全警告 +**完善:** +- 🌐 **在线壁纸** — ActionSheet新增"在线壁纸"选项,接入WallpaperGalleryView的drawer模式,支持12个壁纸源+搜索+分类+收藏 +- 🎨 **渐变预设增强** — 原"预设壁纸"改为"渐变预设",新增薰衣草/晨雾2个渐变,改用Wrap网格布局+选中边框高亮 +- 🎯 **纯色背景增强** — 新增8个预设纯色(墨黑/深蓝/墨绿/暖灰/酒红/靛紫/米白/浅灰)+选中勾选标记+自定义色相滑块 +- 📷 **相册选择** — 保留image_picker相册选图,权限引导完善 +- 🏗️ **WallpaperBackground组件** — 新增`wallpaper_background.dart`,根据wallpaperSourceId渲染纯色/渐变/在线URL/相册文件四种背景 +- 🖼️ **应用背景渲染** — 将WallpaperBackground集成到`app_shell.dart`,窄屏Stack底层+宽屏Stack底层,壁纸真正渲染到应用背景 +- 💾 **持久化存储** — 壁纸路径和来源ID保存到KvStorage,应用启动时自动恢复(已有) +- 🏷️ **在线壁纸预览** — WallpaperSection预览缩略图支持CachedNetworkImage渲染在线壁纸URL + +**修改文件:** +- `lib/features/mine/settings/presentation/theme/theme_sections_style.dart` — WallpaperSection全面重构(在线壁纸+渐变预设+纯色预设) +- `lib/shared/widgets/containers/wallpaper_background.dart` — 新增壁纸背景渲染组件 +- `lib/core/layout/app_shell.dart` — 集成WallpaperBackground到窄屏/宽屏布局 *** -## [v6.5.117] - 2026-05-30 +## [v6.6.137] - 2026-05-30 -### 📊 进度页面全面完善 (优先级1) +### 💡 灵感页面全面重构 — 动态主题/iOS 26风格/消除硬编码颜色 (优先级1) -- 📊 **显示样式改进** (`lib/features/progress/presentation/progress_page.dart`) - - 进度条样式:渐变填充 + 阴影光晕效果,高度从8px提升至10px - - 环形进度样式:尺寸从64提升至72,strokeCap设为round圆角,居中显示百分比+标签双行 - - 倒计时网格样式:单元格增加渐变背景+边框+阴影,天时分秒之间增加冒号分隔符 - - 气泡内容改用 GlassContainer 毛玻璃容器,用户气泡使用 elevated 深度 - - 导航栏新增分享按钮,可直接触发分享进度卡片 +**重构:** +- 💡 **CupertinoNavigationBar增强** — 毛玻璃背景 + 视图切换按钮适配动态圆角 +- 🎨 **动态主题全面适配** — 所有颜色统一从 `AppTheme.ext(context)` 获取,支持亮/暗/AMOLED模式无缝切换 +- 📐 **动态圆角适配** — 使用 `AppRadius.of(context)` 替代静态 `AppRadius`,支持 compact/standard/rounded/super 四种圆角风格 +- 🪟 **GlassContainer毛玻璃层次** — 快捷入口区使用 `GlassDepth.base` 包裹,空状态/错误状态使用 `GlassDepth.elevated` +- 🔴 **消除硬编码颜色** — `InspirationGridCard` 移除6组固定渐变色(`_gradients`),改用基于 `ext.accent` 色相旋转的动态渐变 +- 🔴 **消除CupertinoColors.white硬编码** — 网格卡片文字/背景改用 `ext.textInverse`,点赞图标改用 `ext.errorColor` +- 🌐 **翻译系统修复** — 空状态副标题从硬编码中文 `'换个分类试试吧'` 改为 `t.discover.tryOtherCategory` +- 📐 **InspirationListCard** — 传入 `dynamicRadius.lgBorder` 给 PressableCard,支持动态圆角 +- 📐 **InspirationCategoryPill** — 使用 `dynamicRadius.pillBorder` 替代静态 `AppRadius.pillBorder` +- 📐 **InspirationQuickEntryChip** — 使用 `dynamicRadius.mdBorder` 替代静态 `AppRadius.mdBorder` +- 📐 **InspirationDetailSheet** — 全面适配动态圆角 -- 📊 **数据管理改进** (`lib/features/progress/providers/progress_provider.dart`) - - 新增 `updateUserItem()` 方法:支持编辑名称/目标日期/标签/显示样式 - - 新增 `reorderUserItems()` 方法:支持拖拽重排 - - 新增 `clearAllUserItems()` 方法:一键清空所有自定义进度 - - 清空操作改用单次调用替代逐个删除循环 - -- 📊 **编辑功能** (`progress_page.dart`) - - 新增 `_showEditSheet()` 方法:点击用户进度气泡打开编辑面板 - - 编辑面板支持修改名称、标签、目标日期、显示样式 - - 气泡底部新增编辑按钮(pencil icon) - - 长按用户气泡触发删除确认 - -- 📊 **分享功能改进** (`progress_page.dart`) - - 从纯文本分享升级为视觉卡片截图分享 - - 新增 `_showShareCardSheet()`:预览进度卡片 + 保存到相册 + 系统分享 - - 使用 RepaintBoundary + RenderRepaintBoundary.toImage() 截图 - - 保存到相册使用 Gal.putImageBytes() - - 系统分享使用 SharePlus + XFile.fromData() 发送PNG图片 - - 卡片内容:总进度环形图 + 进行中/已完成统计 + 各项进度条 + 日期水印 - -- 📊 **设置面板改进** (`progress_page.dart`) - - 显示样式选择器:每项带视觉预览(进度条/环形/网格/标签缩略图) - - 添加/编辑进度时内嵌样式选择器,4种样式横向排列带预览 - - 样式应用面板:选择样式后可逐项或全部应用 - - 数据管理面板:使用 ReorderableListView 支持拖拽重排 - - 数据项显示样式标签,编辑/删除按钮 - - 清空操作使用 clearAllUserItems 替代逐个删除 - -- 📊 **模型扩展** (`lib/features/progress/models/progress_models.dart`) - - ProgressDisplayStyle 枚举增加 id/label/emoji/iconName 属性 - - 支持 `style.label` 显示中文名、`style.emoji` 显示图标 +**修改文件:** +- `lib/features/discover/presentation/pages/home/inspiration_page.dart` — 全面重构,头部注释更新 +- `lib/features/discover/presentation/pages/home/inspiration_widgets.dart` — 全面重构,消除硬编码颜色/圆角 *** -## [v6.5.116] - 2026-05-30 +## [v6.6.136] - 2026-05-30 -### 🎨 日签卡片页面 iOS 26 风格重构 (优先级1) +### 📊 进度页面完善 — 显示样式/数据管理/分享功能 (优先级1) -- 🎨 **日签卡片主页面重构** (`lib/features/daily_card/presentation/daily_card_page.dart`) - - 移除导航栏样式选择弹窗,改为内联水平芯片选择器 - - 卡片预览区使用 Expanded 占据大部分屏幕,居中展示 - - 添加 flutter_tilt 3D 倾斜交互效果(角度6°,手势+传感器) - - 底部操作栏使用 GlassContainer 毛玻璃背景 - - "换一句"按钮移至底部操作栏右侧,渐变背景+强调色 - - 所有颜色使用 AppTheme.ext(context) 动态主题 - - 所有圆角使用 AppRadius.of(context) 动态样式 - - 所有间距使用 AppSpacing 统一令牌 +**完善:** +- 🎨 **气泡头像emoji化** — `progress_bubble.dart` 头像从通用图标改为显示item的emoji + 渐变背景 +- ⏱️ **倒计时实时秒级更新** — 新增 `_LiveCountdownGrid` StatefulWidget,内置1秒Timer驱动 `setState` +- 📊 **进度条/环形进度动画** — 新增 `_AnimatedProgressBar` 和 `_AnimatedRingProgress`,使用 `TweenAnimationBuilder` +- 📋 **概览摘要卡片** — `progress_page.dart` 顶部新增 `GlassContainer` 概览卡片 +- 🪟 **输入栏毛玻璃** — 输入栏改用 `GlassContainer(depth: elevated)` 包裹 +- 🏷️ **标签边框增强** — tag标签添加 `border` 细边框 +- ✏️ **编辑/删除按钮增强** — footer区域编辑/删除按钮添加背景色容器 +- 📋 **复制文本按钮** — `progress_share_card.dart` 新增「复制文本」按钮 +- 🎨 **分享卡片视觉** — 分享卡片header改用渐变图标容器 +- 📝 **分享文本格式** — 分享文本增加emoji前缀、📈总进度行 +- 🔒 **loading状态修复** — `progress_provider.dart` 初始状态改为 `isLoading: true` +- 🛡️ **数据持久化增强** — `_loadUserItems` 增加单条解析try-catch +- 🧹 **空状态优化** — 空状态图标改用渐变背景容器 + elasticOut动画 -- 🎨 **样式选择器重构** (`card_style_selector.dart`) - - 紧凑 pill 芯片样式,高度从64→44 - - 使用 AppTheme/AppRadius/AppSpacing 动态主题 - - 选中态添加渐变阴影效果 - - NEW 标签使用 ext.accent 替代硬编码蓝色 - -- 🎨 **操作栏重构** (`card_action_bar.dart`) - - GlassContainer 毛玻璃背景替代纯色按钮 - - 紧凑图标+文字按钮行替代三个 Expanded 大按钮 - - 使用 AppRadius/AppSpacing 动态令牌 - -- 🎨 **内容类型选择器重构** (`content_type_selector.dart`) - - 移除硬编码 Color(0xFF6C63FF),改用 ext.accent 动态主题 - - 使用 AppRadius/AppSpacing 动态令牌 - - 选中态添加阴影效果 - -- 🎨 **卡片渲染器增强** (`card_renderer.dart`) - - 卡片圆角使用 AppRadius.of(context) 动态圆角 - - 双层阴影:黑色基础阴影 + 渐变色主题阴影,增强层次感 - - 毛玻璃2.0样式内部圆角使用动态令牌 - - 日期标签圆角使用动态令牌 +**修改文件:** +- `lib/features/progress/presentation/progress_bubble.dart` +- `lib/features/progress/presentation/progress_page.dart` +- `lib/features/progress/presentation/progress_share_card.dart` +- `lib/features/progress/providers/progress_provider.dart` *** -## [v6.5.115] - 2026-05-30 +## [v6.6.135] - 2026-05-30 -### 📝 协议信息更新 - 邮箱/域名/ICP备案号 (优先级3) +### ⏱️ 进度页面智能定时器 + 灵感页面刷新按钮 (优先级1) -- 📝 **协议数据邮箱替换** (`lib/features/agreements/data/agreement_data.dart`) - - 全部 `21981550@qq.com` 替换为 `2821981550@qq.com`(中英文共31处) - - 中文协议每个"邮箱"行后增加 `2572560133@qq.com` - - 英文协议每个"Email"行后增加 `2572560133@qq.com` - - 所有"联系方式"区域开发者信息后增加 `ICP备案号:滇ICP备2022000863号-18A` - - 开发团队版权行增加ICP备案号 +**修复/优化:** +- ⏱️ **替换60s暴力刷新为智能定时器** — 移除 `Timer.periodic(60s)`,改为1秒倒计时定时器 + 5分钟系统刷新定时器 +- ⏱️ **倒计时实时更新** — `ProgressTimeline` 新增 `tick` 可选参数 +- 🔄 **灵感页面导航栏刷新按钮** — 新增 `CupertinoIcons.refresh` 刷新按钮 -- 📝 **协议列表页更新** (`lib/features/agreements/presentation/agreement_list_page.dart`) - - 页脚邮箱替换为 `2821981550@qq.com`,增加 `2572560133@qq.com` - - 页脚增加ICP备案号显示 - -- 📝 **协议类型域名更换** (`lib/features/agreements/data/agreement_types.dart`) - - `_webBase` 从 `https://tools.wktyl.com/agreements` 改为 `https://s2ss.com/agreements` - -- 📝 **关于页面增加ICP号** (`lib/features/mine/profile/presentation/about_page.dart`) - - 页脚增加 `滇ICP备2022000863号-18A` 显示 - -- 📝 **了解我们邮箱补充** (`lib/features/mine/profile/presentation/learn_us_widgets.dart`) - - 邮箱列表增加 `2572560133@qq.com` +**修改文件:** +- `lib/features/progress/presentation/progress_page.dart` +- `lib/features/progress/presentation/progress_bubble.dart` +- `lib/features/discover/presentation/pages/home/inspiration_page.dart` *** -## [v6.5.114] - 2026-05-30 +## [v6.6.135] - 2026-05-30 -### 🛠 工具中心设置页面 + 长按拖拽删除 + 重要工具介绍 (优先级2) +### 💡 灵感页面暗色渐变适配 & 错误状态UI (优先级2) -- 🛠 **工具中心设置页面** (`lib/features/discover/presentation/pages/tool_center_settings_page.dart`) - - 新建工具中心设置页,CupertinoPageScaffold + CupertinoNavigationBar - - 使用统计区域:总使用次数/可用工具数/已使用工具数 三栏统计卡片 - - 最常用工具排行 Top5,带🥇🥈🥉奖牌 - - 已删除工具管理区域:搜索已删除工具、单个恢复、全部恢复(带确认弹窗) - - 使用 GlassContainer 毛玻璃卡片、AppTheme.ext(context) 主题系统 +**新增:** +- 💡 **InspirationGridCard 暗色渐变** — 新增 `_darkGradients` 常量 +- 💡 **灵感页面错误状态** — `InspirationState` 新增 `String? error` 字段 -- 🛠 **工具数据模型扩展** (`lib/features/discover/models/tool_item.dart`) - - ToolItem 新增 `isDeleted` 字段,默认 false - - copyWith 方法新增 `isDeleted` 参数 - -- 🛠 **工具中心状态管理扩展** (`lib/features/discover/providers/tool_center_provider.dart`) - - ToolCenterState 新增 `deletedTools`/`visibleTools` getter - - `allToolsSorted`/`topTools` 改为基于 `visibleTools`(排除已删除工具) - - ToolCenterNotifier 新增 `deleteTool()`/`restoreTool()`/`restoreAllTools()` 方法 - - 新增 `_persistToolDeleted()` 持久化方法,存储键 `tool_del_{id}` - - `_loadPersistedData()` 加载 isDeleted 持久化状态 - -- 🛠 **工具面板底部栏导航** (`lib/features/discover/presentation/widgets/tool/tool_bottom_bar.dart`) - - ToolBottomBar 从 StatelessWidget 改为 ConsumerWidget - - 设置按钮点击:关闭面板 → 导航到工具中心设置页 (`/tool-center/settings`) - -- 🛠 **长按拖拽删除功能** (`lib/features/discover/presentation/widgets/tool/tool_panel.dart`) - - 工具网格项包裹 `LongPressDraggable` - - 拖拽开始:触觉反馈 + 显示底部垃圾桶区域 - - 拖拽结束/取消:隐藏垃圾桶区域 - - 垃圾桶区域:`DragTarget`,悬停时红色高亮 + 放大动画 - - 拖拽反馈组件 `_DragFeedback`:渐变背景 + emoji + 阴影 - - 拖拽中原位置半透明占位 (opacity: 0.3) - -- 🛠 **重要工具长按介绍弹窗** (`tool_panel.dart`) - - 新增 `_ToolIntro` 数据类,包含 name/emoji/description/tips - - 6个重要工具介绍:翻译守护/文本朗读/拼音注音/每日运势/闲情逸致/番茄钟 - - 重要工具长按直接弹出 CupertinoAlertDialog 介绍弹窗 - - 非重要工具长按保持原有底部菜单 - - 底部菜单新增"📖 工具介绍"选项(仅重要工具显示) - - 底部菜单新增"🗑️ 移除工具"选项(红色破坏性操作,带确认弹窗) - -- 🛠 **路由注册** (`lib/core/router/app_routes.dart`, `lib/core/router/tool_routes.dart`) - - AppRoutes 新增 `toolCenterSettings = '/tool-center/settings'` - - tool_routes.dart 新增 tool-center-settings GoRoute +**修改文件:** +- `lib/features/discover/presentation/pages/home/inspiration_widgets.dart` +- `lib/features/discover/providers/inspiration_provider.dart` +- `lib/features/discover/presentation/pages/home/inspiration_page.dart` *** -## [v6.5.113] - 2026-05-30 - -### 🛠 多项功能修复与增强 (优先级2) - -- 🛠 **内容纠错页面增强** (`lib/features/correction/presentation/correction_page.dart`) - - 内容类型新增"其他"选项 (id: other, icon: ellipsis_circle_fill) - - 内容ID字段旁添加 info_circle 图标,点击弹出 CupertinoAlertDialog 提示"若无内容ID,请填写0" - - 纠错描述字段添加最小字数提示"请至少描述10个字" - - 提交前校验纠错描述最少10个字,不满足时 Toast 警告 - - 纠错记录列表中每条记录添加来源标签: "本地"(蓝色) / "服务端"(绿色) - -- 🛠 **壁纸模板版权提示** (`lib/features/template/presentation/widgets/wallpaper_preview_sheet.dart`) - - 下载按钮和编辑按钮的 Toast 消息统一改为"暂无版权授权,无法进行此操作" - - 移除 FeatureFlagService 依赖 - -- 🛠 **面对面快传跳转修复** (`lib/features/mine/profile/presentation/profile_page.dart`) - - "面对面快传"快捷操作从显示不支持消息改为导航到文件传输页面 (`/file-transfer`) - -- 🛠 **预测返回和长按预览锁定** (`lib/features/mine/settings/`) - - SettingItem 模型新增 `isLocked` 字段 - - `predictive_back` 和 `long_press_preview` 标记为 isLocked: true - - 默认值从 true 改为 false - - 锁定项开关显示灰色禁用状态,点击弹出"该功能暂不可用"对话框 - - _onToggle 方法增加锁定项拦截逻辑 - -- 🛠 **拼音注音插件卡片增强** (`lib/features/mine/settings/presentation/plugin/`) - - PluginCardFooter 右下角图标从 chevron_right 改为 info_circle - - PluginCardFooter 新增 onInfoTap 回调参数 - - 拼音注音卡片点击 info 图标弹出功能说明对话框 - -*** - -## [v6.5.112] - 2026-05-30 - -### 🎨 壁纸功能完善 + 存储权限分析 (优先级2) - -- 🎨 **壁纸从相册选择** (`lib/features/mine/settings/presentation/theme/theme_sections_style.dart`) - - `_selectFromGallery` 从空壳日志改为完整实现 - - 先通过 `PermissionService.requestPhotos()` 请求相册权限 - - 权限被拒时弹出引导弹窗,支持跳转系统设置 - - 使用 `ImagePicker().pickImage()` 选择图片,限制 maxWidth:1080/maxHeight:1920/quality:85 - - 选择后通过 `themeSettingsProvider.setWallpaper(path, 'gallery')` 保存 - -- 🎨 **预设壁纸改用渐变色** (`theme_sections_style.dart`) - - 移除不存在的 `assets/wallpapers/*.png` 文件路径引用 - - 新增 `_PresetWallpaper` 数据类,定义6种渐变预设(星空/森林/海洋/沙漠/极光/日落) - - 预设壁纸存储格式: `gradient:ARGB32hex1,ARGB32hex2,...` - - 预设选择弹窗改为可视化渐变卡片(emoji+名称+渐变背景) - -- 🎨 **壁纸预览缩略图** (`theme_sections_style.dart`) - - 新增 `_buildWallpaperPreview` 方法,根据 wallpaperSourceId 渲染不同预览 - - `solid:` → 纯色矩形预览 - - `gradient:`/`preset` → LinearGradient 渐变预览 - - `gallery` → Image.file 本地图片预览 - - 预览高度80px,圆角跟随主题 - -- 🎨 **壁纸状态标签优化** (`theme_sections_style.dart`) - - "壁纸已设置" 改为按来源显示: 📷相册/🎨预设/🌈渐变/🎨纯色 - - "清除壁纸"按钮: 无壁纸时灰色不可用样式,有壁纸时红色高亮 - - "从相册选择" 按钮文案改为 "选择壁纸" - -- 🔒 **存储权限注释完善** (`android/app/src/main/AndroidManifest.xml`) - - READ_EXTERNAL_STORAGE(maxSdk=32): 补充说明 minSdk=28, API 28-32 需要 - - WRITE_EXTERNAL_STORAGE(maxSdk=29): 补充说明 minSdk=28, API 28-29 需要,minSdk≥30时可移除 - - 新增 image_picker 到存储权限用途说明 - -- 🔒 **存储权限描述更新** (`lib/core/services/auth/permission_service.dart`) - - storage 权限描述区分 READ(API≤32) 和 WRITE(API≤29) 的必要性 - - usageScenes 新增 "壁纸设置 — 保存壁纸" - -*** - -## [v6.5.111] - 2026-05-30 - -### 🎨 闲情逸致Sheet热度排版 + 外部跳转确认 + 设备详情布局修复 (优先级2) - -- 🎨 **闲情逸致信息网格重构** (`lib/features/tool_center/leisure/presentation/widgets/leisure_card_detail_sheet.dart`) - - `_buildInfoGrid` 从 Wrap 双列布局改为列表布局,每行: icon + label(固定56px) + value(Expanded右对齐) - - 行间添加 Divider 分隔线,整体包裹在圆角容器中 - - 新增 `_InfoItemData` 数据类替代动态 Widget 列表 - - 新增 `_buildInfoRow` 方法,value 允许 maxLines:2 换行 - -- 🔒 **外部链接跳转确认弹窗** (`lib/shared/widgets/feedback/external_link_dialog.dart`) - - `ExternalLinkDialog` 新增 `appName` 可选参数 - - 有 appName 时显示"将打开XX查看更多内容",无则显示完整URL - - 确认按钮文案从"继续访问"改为"打开" - -- 🔒 **闲情逸致外部跳转加确认** (`leisure_card_detail_sheet.dart`) - - 地图按钮: `launchUrl` → `ExternalLinkDialog.launchWithConfirm(appName: '高德地图')` - - 外部搜索: `_launchSearch` 增加 `appName` 参数,传递百度/高德/大众点评/小红书/抖音 - - 移除 `url_launcher` 直接导入 - -- 🔒 **句子详情外部搜索加确认** (`sentence_detail_panel.dart`, `sentence_detail_sheet.dart`) - - `_launchSearchUrl` 方法: `launchUrl` → `ExternalLinkDialog.launchWithConfirm` - - 移除 `url_launcher` 直接导入 - -- 🔒 **聊天链接气泡加确认** (`chat_link_bubble.dart`) - - `_launchUrl` 方法: `launchUrl` → `ExternalLinkDialog.launchWithConfirm` - - 移除 `url_launcher` 直接导入 - -- 🔒 **了解我们/关于/协议页面加确认** (`learn_us_widgets.dart`, `about_page.dart`, `agreement_page.dart`, `agreement_list_page.dart`) - - 邮箱链接: `launchUrl` → `ExternalLinkDialog.launchWithConfirm` - - 协议网页链接: `launchUrl` → `ExternalLinkDialog.launchWithConfirm` - -- 📱 **设备详情Sheet布局修复** (`lib/features/mine/user_center/presentation/devices/device_detail_sheet.dart`) - - `DeviceInfoRow`: label 从自由宽度改为 `SizedBox(width: 72)` 固定宽度 - - value 从 `Flexible` 改为 `Expanded`,添加 `textAlign: TextAlign.right` - - value 从 `maxLines: 1` 改为 `maxLines: 2` 允许换行 - - trailing 间距从 6px 改为 `AppSpacing.xs` - -- 📱 **设备卡片IP溢出修复** (`device_card.dart`) - - IP文本包裹 `SizedBox(width: double.infinity)` 确保约束正确传递 - - 防止长IP地址文本溢出容器 - -*** - -## [v6.5.110] - 2026-05-30 - -### 🐛 稍后读句子不显示 + 图片视频空白 + 收藏记录不显示 (优先级1) - -- 📖 **稍后读句子不显示** (`lib/features/home/presentation/providers/readlater_page.dart`) - - `_chatMessageToEntry()` 新增 `readlater_sentence` 类型处理,映射为 `ReadLaterEntryType.feed` - - 从 `msg.meta` 提取 `feedType`/`feedName`,从 `msg.text` 提取句子内容 - - 新增 `readlaterRefreshStream` 订阅,添加稍后读后自动刷新列表 - - `_buildFeedEntry()` 修复空指针崩溃:`readlater_sentence` 条目无 `feedItem`,改为安全取值 - -- 🖼️ **稍后读图片视频空白** (`lib/features/home/presentation/providers/readlater_page.dart`) - - `_chatMessageToEntry()` 图片/视频条目新增 `msg.meta` 回退提取 thumbnail/fileName/mimeType/fileSize - - subtitle 判断修复:排除以 `/` 或 `http` 开头的路径文本 - - `_buildImageThumbnail()` 新增绝对路径直接加载:先 `File(path).existsSync()` 检查,再回退 `ChatFileService.getAbsolutePath()` - - `Image.network` 添加 `loadingBuilder` 显示加载指示器 - -- 🔔 **分享确认弹窗** (`lib/core/services/readlater/sharing_receiver_service.dart`) - - 所有分享操作完成后由 `AppToast.showSuccess()` 替换为 `_showConfirmDialog()` - - 新增 `_showConfirmDialog()` 方法:显示 CupertinoAlertDialog 确认弹窗 - - 弹窗失败时降级为 Toast 提示 - -- 💕 **收藏记录不显示** (`lib/features/home/providers/favorite_provider.dart`) - - `_loadFeedFavorites()` 修复:将 `FeedItem` 转换为 `FavoriteItem` 并同步到 `items` 列表 - - 新增 `_feedItemToFavoriteItem()` 转换方法 - - 根因:`FavoritePage` 使用 `favState.items` 显示数据,但 `_loadFeedFavorites` 只更新了 `feedItems`,`items` 始终为空 - -- ⌨️ **收藏页搜索框自动弹出键盘** (`lib/features/home/presentation/favorite_page.dart`) - - 在 `ResponsiveMaxWidth` 内的 `SafeArea` 外包裹 `GestureDetector`,点击空白处收起键盘 - - 配合已有的 `_searchFocusNode.canRequestFocus = false` 延迟启用机制 - -*** - -## [v6.5.109] - 2026-05-30 - -### 🎬 句子广场下拉刷新动画恢复 + 精灵气泡秒消失修复 (优先级2) - -- 🎬 **句子列表入场动画恢复** (`lib/features/home/presentation/home_page.dart`) - - 在 `_setupStateListeners()` 中新增 `isForceLoading` 状态监听 - - 当 `isForceLoading` 变为 true(即下拉刷新触发)时,自动清空 `_animatedCardIds` 集合 - - 修复:下拉刷新后句子卡片不再播放 fadeIn + slideY 入场动画的问题 - - 原因:刷新后旧卡片ID仍在 `_animatedCardIds` 中,导致 `_hasPlayedEntrance` 为 true,跳过动画 - -- 💬 **精灵气泡3秒最小展示时间** (`lib/features/home/providers/character_tips_provider.dart`) - - 新增 `Timer? _displayTimer` 字段,替代原来的 `Future.delayed` 方式 - - `generateTip()` 和 `showTip()` 触发前检查 `_displayTimer.isActive`,若气泡仍在展示则忽略新触发 - - `dismissTip()` 手动关闭时同步取消计时器 - - `ref.onDispose()` 中取消计时器防止内存泄漏 - - 修复:精灵气泡被连续触发(点击精灵、电池提醒等)时秒消失的问题 - -*** - -## [v6.5.108] - 2026-05-30 - -### 🔧 摇一摇作用域修复 + 权限管理页新增摇一摇开关 (优先级2) - -- 🔧 **ShakeDetector 路由作用域检查** (`lib/core/services/device/shake_detector.dart`) - - 新增 `_activeScope` 字段和 `setScope()` 方法 - - 新增 `_isScopeAllowed()` 方法:仅当栈顶 handler 路由匹配当前作用域时才允许触发 - - 摇一摇触发前增加作用域拦截,不匹配时打印日志并跳过 - - 修复:从首页导航到3/4级页面时摇一摇仍被触发的 Bug - -- 🔧 **ShakeScopeObserver 路由观察者** (`lib/core/router/app_router.dart`) - - 新增 `ShakeScopeObserver` 类,监听 GoRouter 路由变化 - - 当路由为 `/home` 时设置 scope 为 `/home`,允许摇一摇 - - 当路由为其他页面时设置 scope 为 null,自动拦截摇一摇 - - 在 `appRouter` 初始化后自动注册观察者 - -- 🔐 **AppPermission 新增 shake 虚拟权限** (`lib/core/services/auth/permission_service.dart`) - - 新增 `AppPermission.shake` 枚举值 - - 属性: label='摇一摇', icon=CupertinoIcons.arrow_counterclockwise, isVirtual=true, group=PermissionGroup.optional - - 新增 `isShakeEnabled` getter:从 KvStorage 读取 `shake_enabled`,默认 true - - 新增 `setShakeEnabled()` 方法:保存到 KvStorage,禁用时自动调用 `ShakeDetector.instance.stop()` - - `_checkVirtualStatus()` 支持 shake 权限状态检查 - -- 🎛️ **权限管理页面新增摇一摇开关** (`lib/features/mine/settings/presentation/privacy/permission_management_page.dart`) - - 新增 `_ShakePermissionCard` 组件:带 CupertinoSwitch 开关的权限卡片 - - 显示"已开启/已关闭"状态标签 - - 切换开关时调用 `PermissionService.setShakeEnabled()` 并刷新权限状态 - -*** - -## [v6.5.107] - 2026-05-30 - -### 🔒 引导页权限合规修复 — 协议同意前不访问任何权限 (优先级1) - -- 🔒 **创建 PostAgreementInitializer 类** (`lib/core/services/post_agreement_initializer.dart`) - - 将所有权限敏感的服务初始化集中管理 - - 包含: ConnectivityService、ClipboardMonitorService、BackgroundTaskService、LocalNotificationService、ScreenWakeService、BatteryOptimizationService、ReadlaterReminderService、HomeWidgetService、SharingReceiverService、ChatMigrationService - - 幂等设计,多次调用安全 - - `shouldInit()` 判断是否需要初始化(已完成引导且尚未初始化) - -- 🔒 **main.dart 初始化序列重构** - - 协议同意前仅初始化无权限访问的服务: WidgetsFlutterBinding、KvStorage、HapticService、PerformanceOrchestrator、LiquidGlassWidgets、PageRegistry、DeepLinkService、CrashMonitor、WallpaperFavoriteService、WallpaperHealthService、SettingsChangeLogger、Platform3DService - - 老用户(已完成引导): main() 中检测 `PostAgreementInitializer.shouldInit()` 后立即初始化 - - 新用户(未同意协议): 权限敏感服务延迟到用户同意协议后初始化 - -- 🔒 **onboarding_provider.dart 修改** - - `completeOnboarding()` 中用户同意协议后调用 `PostAgreementInitializer.init()` - - 确保新用户在协议同意后才触发权限请求 - -- 🔒 **合规性说明** - - 修复应用商店审核问题: 用户同意协议前不读取传感器列表、网络状态、剪贴板、通知权限等 - - 符合 iOS App Store 和 Android 应用商店隐私合规要求 - -*** - -## [v6.5.106] - 2026-05-30 - -### 🔒 Android 自启动行为修复 (优先级1) - -- 🔒 **移除 WorkManager 自启动 Receiver** - - `AndroidManifest.xml` 添加 `xmlns:tools` 命名空间 - - 添加 `` - - 阻止 `BOOT_COMPLETED` 广播触发 WorkManager 后台任务自启动 - -- 🔒 **后台任务初始化增加用户协议检查** - - `BackgroundTaskService.init()` 在初始化前检查 `KvStorage.isOnboardingCompleted` - - 用户未同意协议时跳过后台任务初始化,符合应用商店合规要求 - - 添加 `kv_storage.dart` 导入 - -*** - -## [v6.5.105] - 2026-05-29 - -### 🔧 编译修复 — Android/Web/Windows 三平台编译通过 (优先级1) - -- 🔧 **bitsdojo_window_windows 适配 win32 6.x** (P0 阻塞) - - 原 `bitsdojo_window_windows` 0.1.6 依赖 `win32: ^5.1.1`,与本地 `win32` 6.2.0 不兼容 - - 创建本地适配版本 `packages/bitsdojo_window_windows` v0.1.7 - - 适配 win32 6.x 新类型系统: `HWND`/`WPARAM`/`LPARAM` extension type、`Win32Result` 返回值、`SET_WINDOW_POS_FLAGS`/`SYSTEM_METRICS_INDEX` 枚举 - - 修复 Dart 3.11 `base class` 约束: `BDWPublicAPI`/`BDWAPI`/`SWPParam`/`SWTParam` 添加 `base` 修饰符 - - 在 `pubspec.yaml` 的 `dependency_overrides` 中添加本地路径覆盖 - -- 🔧 **Android 资源链接错误修复** (P0 阻塞) - - `flutter_vibrate` 包 `compileSdkVersion 30` 过低,导致 `android:attr/lStar not found` - - 在 `android/build.gradle.kts` 中添加 `afterEvaluate` 强制所有子项目 `compileSdk = 36` - -- 🔧 **Web 编译 Platform.isOhos 兼容修复** (P1) - - `workmanager` 和 `live_activities` 本地包使用 `Platform.isOhos`,Web 平台无此成员 - - 改用 `(Platform as dynamic).isOhos == true` 动态调用 + try-catch 兼容 - - 添加 `kIsWeb` 前置检查避免 Web 平台调用 `dart:io` - -- 🔧 **缺失资源目录修复** (P0) - - 创建 `assets/models/3d/` 和 `assets/models/thumbnails/` 目录(含 `.gitkeep`) - - 在 `pubspec.yaml` 中添加 `assets/images/` 资源声明 - -- ✅ **编译结果** - - Android: `app-release.apk` (90.4MB) ✅ - - Web: `build/web/` ✅ - - Windows: `xianyan.exe` ✅ - -*** - -## [v6.5.104] - 2026-05-29 - -### 🏗️ 多语言翻译架构重构 (优先级1) - -- 🏗️ **translations.dart 拆分为多模块架构** - - 原 3734行/168KB 单文件拆分为 25+ 个职责清晰的模块文件 - - `types/` 目录: 类型定义 (TNav, TCommon, TDiscover, TProfile, TSettings, TAbout, T + 5个Settings子类型) - - `languages/` 目录: 11种语言翻译数据独立文件 (zh_CN, en, ja, zh_TW, es, ar, bn, hi, pt, ru, fr) - - `translations.dart` 改为 barrel 导出文件,保持原有 import 路径兼容 - - 新增语言只需新建文件,零冲突风险 - -- 🏗️ **TAbout 翻译类型补全** (修复77个编译错误) - - 原文件缺少 TAbout 类定义,但项目中有77处 `t.about.*` 引用 - - 新增 TAbout 类 (69字段) + 所有11种语言翻译数据 - - 涉及: 应用信息、了解我们、技术栈、构建信息、设备信息、官网、开发者、团队、QQ群、备案等 - -- 🔧 **withFallback 自动化** (建议1) - - 所有类型添加 `toMap()`/`fromMap()` 方法 - - T.withFallback 从 ~750行手工样板代码缩减为 ~15行 map 合并 - - 新增字段只需更新 toMap/fromMap,无需再维护 withFallback - -- 🔧 **checkCoverage 自动化** (建议2) - - TranslationCoverage.checkCoverage 从 ~360行手工检测重写为 ~15行 map 遍历 - - totalFieldCount 改为自动计算,不再硬编码 - - 新增 checkCoverageDetail() 和 fullReport() 方法 - - 新增字段无需手动添加检测代码 - -- 🔧 **TSettings 按功能域拆分子类型** (建议6) - - TSettingsInteraction: 交互设置 (21字段) - - TSettingsDisplay: 显示设置 (16字段) - - TSettingsPerformance: 性能设置 (15字段) - - TSettingsPrivacy: 隐私设置 (9字段) - - TSettingsAdvanced: 高级设置 (29字段) - - 保留 @Deprecated 扁平 getter 向后兼容,现有代码零改动 - -- 🔧 **intl 包复数/性别支持** (建议7) - - TFunc 使用 `Intl.plural()` 替代手写 switch - - 阿拉伯语支持完整 CLDR 6种复数形式 (zero/one/two/few/many/other) - - 俄语新增复数支持 (one/few/many/other) - - greeting() 补全 ru/fr/pt/hi 翻译 - -- 📝 **翻译字段文档注释** (建议8) - - 所有类型定义字段添加中文文档注释 - - TSettings 按功能域分组注释 - - TAbout 按页面区域分组注释 - -- ⚙️ **analysis_options 配置** (建议5) - - 新增 `deprecated_member_use_from_same_package: ignore` - - 翻译模块 @Deprecated 兼容桥接不再产生警告 - -- 🧪 **CI 翻译覆盖率检测** (建议4) - - 新建 `test/l10n/translation_coverage_test.dart` - - 6个测试用例: 字段数检测、zh_CN 100%覆盖、50%最低门槛、零翻译检测、语言完整性、缺失字段诊断 - -- 📋 **ARB 迁移规划** (建议9) - - 记录长期规划: 迁移到 ARB 标准格式 + flutter gen-l10n 工具链 - - 当前架构已具备 toMap/fromMap 基础,为未来迁移做好准备 - -*** - -## [v6.5.103] - 2026-05-29 - -### ✨ Rive动画+跨平台兼容+智能AppBar - -- ✨ **rive_tab_icon: Rive交互式动画组件** (优先级2) - - 新建 `lib/core/layout/rive_tab_icon.dart`,使用Rive StateMachine控制选中状态 - - 作为TabIconSprite的可选替代方案,预留.riv资源接口 - - 新增依赖: `rive: ^0.13.0` - - 新建文件: rive_tab_icon.dart, pubspec.yaml - -- ✨ **split_divider: 桌面端跳过HapticFeedback** (优先级2) - - `_onDragStart`和`onDoubleTap`中的`HapticFeedback`调用前添加`pu.isDesktop`检测 - - 桌面端无振动马达,跳过触觉反馈避免无效调用 - - 使用项目已有的`platform_utils.dart`跨平台抽象(非dart:io) - - 修改文件: split_divider.dart - -- ✨ **app_shell: 桌面端键盘快捷键** (优先级1) - - 宽屏布局桌面端添加Shortcuts/Actions/Focus包裹 - - Ctrl+1/2/3 切换Tab,Ctrl+W 关闭右侧面板 - - 新增 `_SwitchTabIntent`/`_ClosePanelIntent` 意图类 - - 新增 `_SwitchTabAction`/`_ClosePanelAction` 动作类 - - 修改文件: app_shell.dart - -- ✨ **smart_app_bar: 智能AppBar标题位置适配** (优先级2) - - 新建 `lib/core/layout/smart_app_bar.dart` - - 窄屏(<900px): CupertinoNavigationBar标题居中 - - 宽屏(>=900px): 内容区头部标题靠左,更高效利用空间 - - 新建文件: smart_app_bar.dart - -*** - -## [v6.5.102] - 2026-05-29 - -### ✨ 桌面端增强 — 文件拖放+自定义标题栏+跨面板拖拽+三栏布局+面板书签 - -- ✨ **chat_flow_panel: 集成desktop_drop文件拖放** (优先级1) - - 使用`DropTarget`包裹聊天面板内容,桌面端(pu.isDesktop)才启用 - - `onDragEntered`显示蓝色2px高亮边框+半透明蓝色背景 - - `onDragExited`移除高亮 - - `onDragDone`打印拖入文件路径日志`Log.i('拖入文件: ...')` - - 新增依赖: `desktop_drop: ^0.5.0` - - 修改文件: chat_flow_panel.dart, pubspec.yaml - -- ✨ **main.dart: 集成bitsdojo_window桌面端自定义标题栏** (优先级1) - - `main()`函数中桌面端调用`doWhenWindowReady`设置最小窗口(400x600)和标题('闲言') - - 新增依赖: `bitsdojo_window: ^0.1.6` - - 修改文件: main.dart, pubspec.yaml - -- ✨ **adaptive_nav_bar: 顶部导航栏添加窗口控制按钮** (优先级1) - - 水平导航栏(顶部停靠)右侧添加`WindowTitleBarBox+MoveWindow`可拖拽区域 - - 新增`_WindowControlBtn`组件:最小化/最大化/关闭按钮,hover高亮效果 - - 关闭按钮hover显示红色背景+白色图标 - - 仅桌面端(pu.isDesktop)且顶部导航栏时显示 - - 修改文件: adaptive_nav_bar.dart - -- ✨ **panel_bookmark: 面板书签功能** (优先级2) - - `PanelBookmark`数据模型:name/tabIndex/panelId/panelArgs - - `PanelBookmarkNotifier`状态管理:addBookmark/removeBookmark,持久化到KvStorage - - `panelBookmarkProvider`全局Provider - - 新建文件: lib/core/layout/panel_bookmark.dart - -- ✨ **home_sentence_list_section: 跨面板拖拽LongPressDraggable** (优先级2) - - `SentenceCard`外层包裹`LongPressDraggable`,data为句子ID - - feedback: Opacity 0.7 + Transform.scale 0.8的半透明缩小预览 - - childWhenDragging: Opacity 0.3的占位 - - 修改文件: home_sentence_list_section.dart - -- ✨ **sentence_detail_panel: DragTarget接收跨面板拖拽** (优先级2) - - 面板外层包裹`DragTarget` - - `onWillAcceptWithDetails`返回true - - `onAcceptWithDetails`接收句子ID并打印日志 - - 拖拽悬停时显示蓝色2px高亮边框(AnimatedContainer) - - 修改文件: sentence_detail_panel.dart - -- ✨ **三栏布局 — 超宽屏(>=1400px)支持** (优先级1) - - `SplitViewState`新增`thirdPanelContent`/`thirdPanelArgs`字段(freezed) - - `SplitViewNotifier`新增`setThirdPanel()`方法 - - 新增`kTripleColumnBreakpoint = 1400.0`常量 - - 新建`TripleColumnView`三栏布局组件:左侧列表+中间详情+右侧辅助面板 - - 两条`SplitDivider`可拖拽分割线,左栏15%-35%,中栏25%-55%,右栏自适应 - - `AppShell._buildWidescreenLayout`添加三栏检测:screenWidth>=1400且thirdPanelContent非null时使用TripleColumnView - - 新建文件: lib/core/layout/triple_column_view.dart - - 修改文件: split_view_provider.dart, split_view_provider.freezed.dart, app_shell.dart - -## [v6.5.101] - 2026-05-29 - -### 🔄 重构 — 三库集成(photo_view/dartx/freezed) - -- 🔄 **sentence_detail_panel: HTML内容区域img标签检测+PhotoView全屏查看** (优先级2) - - 新增`_extractImageUrls()`方法,使用正则提取HTML中``标签的src属性 - - `_buildHtmlContentBox()`增强:检测到图片时在文本下方渲染缩略图,点击打开PhotoView全屏查看 - - 图片缩略图带"查看"角标,支持缩放/平移 - - 修改文件: sentence_detail_panel.dart - -- 🔄 **split_view_provider: freezed不可变数据类+dartx集合扩展** (优先级1) - - `SplitViewState`改为`sealed class`配合`@freezed`注解 - - 移除手写`copyWithClearPanel`方法,改用freezed生成的`copyWith`传入null清除可选字段 - - `clearActivePanel()`修复:按tab分别清除对应面板(homeRightPanel/discoverRightPanel/profileRightPanel) - - `SplitRatioOption`新增`findByValue()`(使用Dart内置`firstOrNull`)和`indexOfValue()`静态方法 - - `NavBarPosition.values`安全访问改用手动边界检查替代dartx的`getOrNull` - - 移除dartx导入依赖,使用Dart 3.x内置集合扩展 - - 新增手写`split_view_provider.freezed.dart`(build_runner未能自动生成,手动实现freezed模式) - - 修改文件: split_view_provider.dart, split_view_provider.freezed.dart - -- 🔄 **right_panel_registry: 移除dartx依赖** (优先级2) - - `getPanelIdAtIndex`和`getBuilderAtIndex`改用手动边界检查替代`getOrNull` - - 移除dartx导入 - - 修改文件: right_panel_registry.dart - -- 🔄 **general_settings_pickers/sections: 移除dartx依赖** (优先级3) - - `showSplitRatioPicker`使用`SplitRatioOption.indexOfValue()`替代`indexWhere` - - `showNavBarPositionPicker`使用手动边界检查替代`getOrNull` - - `general_settings_sections`使用手动边界检查替代`getOrNull` - - 移除dartx导入 - - 修改文件: general_settings_pickers.dart, general_settings_sections.dart - -## [v6.5.100] - 2026-05-29 - -### ✨ 动画增强 — Hero过渡 + 声明式动画 + 交错入场 - -- ✨ **sentence_detail_panel: Heroine包裹句子卡片区域** (优先级2) - - 外层添加`Heroine(tag: 'sentence_detail_${sentence.id}')`包裹整个句子卡片Container - - 内层保留`Heroine(tag: 'sentence_${sentence.id}')`包裹SelectableText - - 支持窄屏Sheet与宽屏Panel之间的共享视觉过渡 - - 修改文件: sentence_detail_panel.dart - -- ✨ **sentence_detail_sheet: 匹配Heroine实现Sheet/Panel共享过渡** (优先级2) - - 与Panel使用相同的`Heroine(tag: 'sentence_detail_${sentence.id}')`标签 - - 窄屏打开Sheet→旋转到宽屏时,句子卡片区域可无缝过渡到Panel - - 修改文件: sentence_detail_sheet.dart - -- 🔄 **adaptive_split_view: 完全移除AnimationController,改用flutter_animate target** (优先级2) - - 移除`AnimationController? _panelController`和`bool _wasSplitView`字段 - - 移除手动`_panelController?.forward()/reverse()`调用 - - 使用`.animate(target: hasRightContent ? 1.0 : 0.0)`声明式控制动画方向 - - 代码更简洁,无需手动管理动画生命周期 - - 修改文件: adaptive_split_view.dart - -- ✅ **overview_dashboard: 交错入场动画已就绪** (优先级3) - - `_buildQuickActions`和`_buildStats`已使用`AnimationLimiter`+`AnimationConfiguration.staggeredList`+`SlideAnimation`+`FadeInAnimation` - - `flutter_staggered_animations: ^1.1.1`已在pubspec.yaml中 - - 无需额外修改 - -## [v6.5.99] - 2026-05-29 - -### 🔄 重构 — 概览仪表盘数据接入 - -- 🔄 **overview_dashboard: 替换硬编码占位数据为真实Provider数据** (优先级2) - - 今日推荐: 使用`homeProvider.dailySentences`获取推荐句子列表,空数据时显示空状态提示 - - 快捷操作: 8个操作项改为功能性操作(搜索/收藏/稍后读/历史/签到/阅读报告/每日推荐/设置),点击导航到对应路由 - - 数据统计: 使用`authProvider`(阅读天数)、`favoriteProvider`(收藏数)、`likesProvider`(点赞数)、`signinProvider`(连续签到天数)获取真实统计值 - - 修改文件: overview_dashboard.dart - -## [v6.5.98] - 2026-05-29 - -### 🐛 Bug修复 — 宽屏适配审计修复 - -- 🐛 **display_settings_provider: KvStorage key与split_view_provider统一** (优先级1) - - 修复前: display_settings_provider使用`general_`前缀key(`general_nav_bar_position`等),split_view_provider使用无前缀key(`nav_bar_position`等) - - 修复后: 统一使用无前缀key,确保设置页面修改能正确同步到分屏视图 - - 修改文件: display_settings_provider.dart - -- 🐛 **general_settings_page: 分屏设置项缺少事件处理器** (优先级1) - - 修复前: `nav_bar_position`/`split_view_ratio`/`split_view_enabled`三个设置项点击无反应 - - 修复后: _onToggle添加split_view_enabled处理,_onSelection添加nav_bar_position和split_view_ratio处理 - - 新增showNavBarPositionPicker/showSplitRatioPicker选择器弹窗,同步更新generalSettingsProvider和splitViewProvider - - 修改文件: general_settings_page.dart, general_settings_pickers.dart - -- 🐛 **general_settings_provider: 缺少分屏设置setter方法** (优先级1) - - 新增setNavBarPosition/setSplitRatio/setSplitViewEnabled方法 - - 修改文件: general_settings_provider.dart - -- 🐛 **adaptive_nav_bar: 水平导航栏未实现** (优先级2) - - 修复前: _buildHorizontal返回SizedBox.shrink(),选择顶部/底部停靠时导航栏消失 - - 修复后: 实现完整水平导航栏,Row布局+TabIconSprite+Badge+毛玻璃效果 - - 修改文件: adaptive_nav_bar.dart - -- 🐛 **app_shell: 水平导航栏布局使用bottomNavigationBar** (优先级2) - - 修复前: 顶部/底部导航栏使用Scaffold.bottomNavigationBar,无法支持顶部停靠 - - 修复后: 使用Column布局,根据NavBarPosition.top动态放置导航栏位置 - - 修改文件: app_shell.dart - -- 📝 **display_settings_provider: 补充文件头标准注释** (优先级3) - - 修改文件: display_settings_provider.dart - -## [v6.5.97] - 2026-05-29 - -### 新增 ✨ -- 宽屏/横屏分屏适配 — 三个主Tab页面支持左右双面板布局 -- AdaptiveSplitView 自适应分屏组件 — 支持可拖拽分割线、手势隔离、动画过渡 -- AdaptiveNavBar 自适应导航栏 — 宽屏垂直导航栏,支持4种停靠位置(左/右/上/下) -- SplitDivider 可拖拽分割线 — 支持hover高亮、触觉反馈 -- RightPanelRegistry 右侧面板注册表 — 各Tab页面通过注册表提供面板内容 -- OverviewDashboard 概览仪表盘 — 宽屏分屏右侧面板的空状态页面 -- SentenceDetailPanel 句子详情面板 — 首页句子详情在宽屏下显示为右侧面板 -- ChatFlowPanel 会话流详情面板 — 发现页会话流在宽屏下显示为右侧面板 -- SettingsPanelWrapper 设置面板包装器 — 我的页面设置项在宽屏下显示为右侧面板 -- ProfileDashboard 个人中心概览仪表盘 — 我的页面宽屏空状态 -- SplitViewProvider 分屏状态管理 — 管理分割比例/面板内容/导航栏位置/分屏开关 -- 通用设置新增:导航栏位置选择、分屏比例选择、分屏功能开关 - -### 修改 🔧 -- AppShell 改为 ConsumerStatefulWidget,集成宽屏分屏布局 -- HomePage 宽屏点击句子卡片→右侧显示详情面板,窄屏→底部Sheet -- DiscoverPage 宽屏点击会话行→右侧显示聊天面板,窄屏→全屏导航 -- ProfilePage 宽屏点击设置项→右侧显示设置面板,窄屏→全屏导航 -- DisplaySettingsState 新增 navBarPositionIndex/splitRatio/splitViewEnabled 字段 -- ChatFlowPage 新增 hideNavigationBar 参数支持面板嵌入 - -### 依赖 -- 无新增三方依赖(使用自建AdaptiveSplitView替代dual_screen) - -## [v6.5.96] - 2026-05-29 - -### ✨ 发现页宽屏分屏 — ChatFlowPanel右侧面板 - -- ✨ **chat_flow_panel.dart: 新建会话流面板组件** (优先级1) - - 宽屏分屏时右侧显示会话流内容,嵌入ChatFlowPage作为嵌套导航 - - 面板Header显示会话名称+emoji+关闭按钮(调用setDiscoverRightPanel(null)) - - 使用Navigator嵌套导航,支持面板内路由跳转 - - ChatFlowPage新增hideNavigationBar参数,面板模式下隐藏原生导航栏 - - 新建文件: lib/features/discover/presentation/panels/chat_flow_panel.dart - -- 🔧 **chat_flow_page.dart: 新增hideNavigationBar参数** (优先级1) - - 支持面板嵌入模式,隐藏CupertinoNavigationBar - - 提取body为独立变量,根据hideNavigationBar决定是否包裹导航栏 - - 修改文件: lib/features/discover/presentation/pages/chat/chat_flow_page.dart - -- 🔧 **discover_page.dart: 宽屏分屏支持** (优先级1) - - _onSessionTap新增宽屏检测(宽度>=kSplitViewBreakpoint且splitViewEnabled) - - chat/readlater类型会话在宽屏时通过_openChatFlowPanel在右侧面板打开 - - 窄屏保持原有全屏导航行为不变 - - 新增_openChatFlowPanel方法:注册RightPanelRegistry + setDiscoverRightPanel - - 新增import: split_view_provider, adaptive_split_view, right_panel_registry, chat_flow_panel - - 修改文件: lib/features/discover/presentation/pages/home/discover_page.dart - -## [v6.5.95] - 2026-05-29 - -### ✨ 闲情逸致数据导入功能 - -- ✨ **leisure_import_service.dart: 新建数据导入服务** (优先级2) - - 解析JSON字符串(与导出格式一致: version/nodes/bookmarks) - - 版本兼容性校验(仅支持1.x版本) - - 支持3种冲突策略: 跳过(skip)、覆盖(overwrite)、重命名(rename) - - 合并导入节点到时间线(通过leisureTimelineProvider.mergeNodes) - - 合并导入收藏到收藏数据(通过leisureBookmarkProvider.mergeBookmarks) - - 返回ImportResult包含各类计数和错误信息 - - 新增ImportPreview预览类,导入前可预览数据概要 - - 新建文件: lib/features/tool_center/leisure/services/leisure_import_service.dart - -- ✨ **leisure_import_dialog.dart: 新建导入对话框** (优先级2) - - CupertinoAlertDialog + StatefulBuilder实现 - - 双标签页: "📋 从剪贴板导入" / "📁 从文件导入" - - 剪贴板标签: 读取剪贴板内容 → 预览 → 导入 - - 文件标签: file_picker选择JSON文件 → 预览 → 导入 - - 冲突策略选择器: 跳过/覆盖/重命名 - - 导入按钮含加载指示器 - - 导入完成后显示结果摘要(成功/跳过/覆盖/错误计数) - - 新建文件: lib/features/tool_center/leisure/presentation/pages/leisure_import_dialog.dart - -- ✨ **leisure_settings_page.dart: 设置页新增"导入数据"入口** (优先级2) - - 数据管理区域新增"导入数据"行(CupertinoIcons.doc_badge_plus) - - 位于"导出数据"行之前 - - 点击弹出导入对话框 - - 修改文件: leisure_settings_page.dart - -- 🔧 **leisure_timeline_provider.dart: 新增mergeNodes方法** (优先级2) - - 支持外部合并节点列表,自动去重+排序 - - 修改文件: leisure_timeline_provider.dart - -- 🔧 **leisure_bookmark_provider.dart: 新增mergeBookmarks方法** (优先级2) - - 支持外部合并收藏数据,自动持久化到Hive - - 修改文件: leisure_bookmark_provider.dart - -## [v6.5.94] - 2026-05-29 - -### ✨ 日历同步服务 — CalendarService跨平台日历事件集成 - -- ✨ **新建 CalendarService 日历同步服务** (优先级1) - - 单例模式,支持Android/iOS/macOS/Windows原生日历 + HarmonyOS MethodChannel桥接 - - 自动请求日历权限,创建/获取闲言专属日历(名称"闲言",蓝色#007AFF) - - 支持添加/删除日历事件,支持提醒(reminder)和地点(location) - - HarmonyOS通过`com.xianyan/calendar` MethodChannel桥接 - - 新建文件: lib/core/services/device/calendar_service.dart - -- ✨ **每日运势页面集成日历按钮** (优先级1) - - 运势卡片展开详情操作栏新增"日历"按钮(CupertinoIcons.calendar) - - 点击后请求日历权限 → 创建CalendarEvent(标题:今日运势-大吉/中吉等) - - 事件时间: 当天8:00-20:00,提前60分钟提醒 - - 成功: AppToast.showSuccess('已添加到日历 📅') - - 失败: AppToast.showError('添加日历失败') - - 修改文件: daily_fortune_page.dart - -- ✨ **闲情逸致卡片详情Sheet集成日历按钮** (优先级1) - - 操作栏新增"日历"按钮(CupertinoIcons.calendar_badge_plus) - - 点击后请求日历权限 → 创建CalendarEvent(标题:卡片名称,地点:省份+位置) - - 事件时间: 当天9:00-18:00,提前1440分钟(1天)提醒 - - 成功/失败Toast反馈与运势页面一致 - - 修改文件: leisure_card_detail_sheet.dart - -- 🔧 **pubspec.yaml: 新增device_calendar依赖** (优先级1) - - 添加`device_calendar: ^4.3.3`跨平台日历事件读写 - - 添加`timezone: ^0.11.0`依赖覆写,解决device_calendar与flutter_local_notifications的timezone版本冲突 - - 修改文件: pubspec.yaml - -## [v6.5.93] - 2026-05-29 - -### ✨ 触觉反馈服务 — flutter_vibrate集成 + 关键交互点接入 - -- ✨ **haptic_service.dart: 集成flutter_vibrate库,增强触觉反馈能力** (优先级1) - - 新增`flutter_vibrate: ^1.3.0`依赖,优先使用flutter_vibrate的FeedbackType(light/medium/heavy/selection/success/error) - - 不可用时自动降级为Flutter内置HapticFeedback(lightImpact/mediumImpact/heavyImpact/selectionClick) - - 新增`init()`异步初始化方法,检测设备`Vibrate.canVibrate`能力 - - 保留原有4档位系统(关闭/轻柔/标准/强烈),所有反馈方法仍受档位控制 - - 每个反馈方法均添加try-catch保护,确保降级路径可靠 - - 修改文件: haptic_service.dart, pubspec.yaml - -- ✨ **shake_detector.dart: 摇一摇触发触觉反馈** (优先级1) - - 检测到摇一摇手势后,在回调执行后触发`HapticService.medium()`中等强度反馈 - - 修改文件: shake_detector.dart - -- ✨ **leisure_card_detail_sheet.dart: 收藏/标注触觉反馈** (优先级1) - - 收藏按钮切换后触发`HapticService.light()`轻柔反馈 - - 标注选项(想去/已去过/收藏/不感兴趣)切换触发`HapticService.selection()`选择反馈 - - 修改文件: leisure_card_detail_sheet.dart - -- ✨ **sentence_detail_sheet.dart: 点赞/收藏/书签触觉反馈** (优先级1) - - 点赞按钮触发`HapticService.light()`轻柔反馈 - - 收藏按钮触发`HapticService.light()`轻柔反馈 - - 书签按钮触发`HapticService.light()`轻柔反馈 - - 修改文件: sentence_detail_sheet.dart - -- ✨ **correction_page.dart: 纠错提交成功/失败触觉反馈** (优先级1) - - 提交成功触发`HapticService.success()`成功反馈 - - 提交失败触发`HapticService.error()`错误反馈 - - 修改文件: correction_page.dart - -- ✨ **main.dart: HapticService初始化** (优先级1) - - 在KvStorage初始化后调用`HapticService.init()`检测设备震动能力 - - 修改文件: main.dart - -- 🔧 **pubspec.yaml: timezone版本冲突修复** (优先级2) - - `timezone: any`改为`timezone: ^0.11.0`,解决device_calendar与flutter_local_notifications的版本冲突 - - 修改文件: pubspec.yaml - -## [v6.5.92] - 2026-05-29 - -### 🔧 API参数审计 — 纠错提交接口参数补齐 - -- 🔧 **correction_provider.dart: 纠错提交接口参数对齐API文档** (优先级2) - - 新增 `sourceUrl` 参数: 对应API的 `source_url` 字段,传递来源页面URL - - 新增 `isAnonymous` 参数: 对应API的 `switch` 字段,匿名提交时传1,默认0 - - 修复 `email` 键名为 `mail`: API文档和后端均使用 `mail`,之前客户端错误发送 `email` - - 两个新参数均为可选,默认值保证现有调用方无需修改 - - 修改文件: correction_provider.dart - -- ✅ **feed_service.dart: API参数审查通过** (优先级3) - - `/api/feed/list`: `seen_ids` 参数已在 FeedListParams.toQueryParameters() 中实现 - - `/api/feed/action`: 全部action类型(含comment_like/comment_unlike/readtime)已在FeedAction枚举中定义 - - `/api/feed/mix`: `ratios` 参数已在 FeedMixConfig.toQueryParameters() 中正确处理(jsonEncode) - -- ✅ **tool_api_service.dart: API参数审查通过** (优先级3) - - `/api/hanzi/search`: type参数为String泛型,支持API文档全部17种type值 - - `/api/webapi/correction_submit`: type参数已在correction_provider.dart中发送 - -- ✅ **user_center_service.dart: 交互动作审查通过** (优先级3) - - `/api/user_center/interaction`: InteractionAction类已定义全部18种action - - like/dislike/readlater/share/block/view/rating/comment/check/history/counts/notify/tag/progress/preference/search/bookmark/collect - -## [v6.5.91] - 2026-05-29 - -### 🐛 Bug修复 — 句子详情Sheet外部搜索/稍后读 + 稍后读页面外部分享渲染 - -- 🐛 **Issue 11: 句子详情Sheet「外部搜索」按钮改为浏览器搜索** (优先级1) - - 修复前: 点击「外部搜索」根据设置直接跳转本地搜索页或使用默认搜索引擎 - - 修复后: 点击后弹出CupertinoActionSheet,展示百度/必应/谷歌三个搜索引擎选项 - - 用户选择后使用`url_launcher`打开浏览器搜索,`Uri.encodeComponent()`编码查询词 - - 搜索失败时try-catch捕获异常并显示AppToast.showError - - 修改文件: sentence_detail_sheet.dart - -- 🐛 **Issue 12: 句子详情Sheet「稍后读」按钮接入interaction API** (优先级1) - - 修复前: 点击「稍后读」仅调用onReadLater回调+本地Toast,未直接调用interaction API - - 修复后: 点击时先检测sentence.isReadLater,若已标记则显示AppToast.showInfo('已在稍后读列表中') - - 未标记时调用`InteractionNotifier.toggleInteraction(action:'readlater')`直接请求API - - API返回status='added'时显示AppToast.showSuccess('已添加到稍后读') - - API返回status='removed'时显示AppToast.showInfo('已移出稍后读') - - 异常时try-catch捕获并显示AppToast.showError - - 修改文件: sentence_detail_sheet.dart - -- 🐛 **Issue 13: 稍后读页面外部分享内容(图片/视频/文件)无法正确显示** (优先级1) - - 修复前: ReadLaterPage仅加载Feed API数据(FeedItem),外部分享的图片/视频/文件存储在聊天系统中无法显示 - - 修复后: 新增`ReadLaterEntry`统一模型,支持7种内容类型: feed/image/video/file/link/document/text - - `_loadItems`同时加载Feed API数据和聊天消息(`ChatMsgRecord`),合并后按时间排序 - - 图片条目: 显示缩略图(Image.network/Image.file) + 文件名 + 大小 - - 视频条目: 显示缩略图 + 播放按钮 + 文件名 + 大小 - - 文件条目: 显示MIME类型对应emoji + 文件名 + 大小 - - 文档条目: 显示文档类型配色(PDF红/Word蓝/Excel绿/PPT橙) + 标签 + 大小 - - 链接条目: 显示链接图标 + 标题 + URL描述 - - 文本条目: 显示文本内容 + 来源 - - 删除操作: Feed条目调用FeedService.action('unreadlater'),聊天消息调用softDeleteChatMsgRecord - - 修改文件: readlater_page.dart - -## [v6.5.90] - 2026-05-29 - -### 🐛 Bug修复 — 离线预加载崩溃 + BotToast初始化错误 - -- 🐛 **app_toast.dart: BotToast未初始化崩溃修复** (优先级1) - - 修复前: AppToast方法直接调用BotToast,若BotToast未初始化则触发assertion崩溃 - - 修复后: 新增`_isInitialized`静态标志 + `markInitialized()`/`markDisposed()`方法 - - 所有BotToast调用通过`_safeCall()`包装,未初始化时降级为`debugPrint`输出 - - 已初始化但调用异常时catch并打印日志,不再崩溃 - -- 🐛 **app.dart: BotToastNavigatorObserver缺失** (优先级1) - - 修复前: MaterialApp和GoRouter均未添加`BotToastNavigatorObserver`,导致路由切换时Toast状态异常 - - 修复后: OHOS端MaterialApp添加`navigatorObservers: [BotToastNavigatorObserver()]` - - GoRouter的observers列表统一添加`BotToastNavigatorObserver()` - - 两处`BotToastInit()`后立即调用`AppToast.markInitialized()` - -- 🐛 **offline_page.dart: 预加载/同步操作导致卡顿崩溃** (优先级1) - - 修复前: `_preloadNow()`和`_syncNow()`使用`AppToast.showLoading()`,BotToast未初始化时直接崩溃 - - 修复后: 移除`AppToast.showLoading/closeLoading`,改用本地`_isPreloading`/`_isSyncing`状态驱动UI - - 按钮在操作中禁用(onPressed:null)并显示CupertinoActivityIndicator - - 所有异步操作后添加`mounted`检查,防止Widget销毁后调用setState - - `_syncNow()`添加try-catch-finally完整错误处理 - -## [v6.5.89] - 2026-05-29 - -### 🏗️ 页面合并 — 勋章墙+金币记录合并为成就中心 - -- 🏗️ **新建 AchievementCenterPage 成就中心页面** (优先级1) - - 合并勋章墙(BadgeWallPage)和金币记录(CoinLogPage)为统一双Tab页面 - - CupertinoSlidingSegmentedControl切换"勋章墙"和"金币记录"两个Tab - - IndexedStack保持两个Tab的状态不丢失 - - 支持initialTab参数,coin-log路由默认打开金币记录Tab - - 新建文件: lib/features/mine/achievement/presentation/achievement_center_page.dart - -- 🔧 **BadgeWallPage/CoinLogPage添加embedded嵌入模式** (优先级1) - - 新增embedded参数,默认false保持独立页面完整功能 - - embedded=true时仅返回内容区域(CupertinoScrollbar+CustomScrollView),不含CupertinoPageScaffold和NavigationBar - - 供AchievementCenterPage嵌入使用,避免双重Scaffold嵌套 - - 修改文件: badge_wall_page.dart, coin_log_page.dart - -- 🔧 **路由更新** (优先级1) - - badge-wall路由(/badge-wall)指向AchievementCenterPage(默认勋章墙Tab) - - coin-log路由(/coin-log)指向AchievementCenterPage(initialTab:1,默认金币记录Tab) - - 修改文件: user_routes.dart - -- 🎨 **快捷入口网格合并** (优先级2) - - 移除"勋章墙"和"金币记录"两个独立入口 - - "成就中心"入口图标改为trophy_fill,路由改为badgeWall(指向新合并页面) - - 入口数量从12个减少为10个,布局更紧凑 - - 修改文件: quick_action_grid.dart - -## [v6.5.88] - 2026-05-29 - -### ✨ 功能完善 — 纠错页面全面增强 - -- 🔧 **correction_provider.dart: submitCorrection缺少type参数修复** (优先级1) - - 修复前: API提交数据中未包含`type`字段,后端无法区分纠错类型 - - 修复后: 提交数据中增加`type`字段,传递纠错类型(error/typo/missing/suggestion) - - 新增`username`和`email`可选参数,支持提交时附带用户信息 - -- ✨ **correction_page.dart: 提交成功/失败Toast反馈** (优先级1) - - 修复前: 使用CupertinoAlertDialog作为提示,体验不佳 - - 修复后: 使用AppToast.showSuccess/showError/showWarning统一反馈 - - 成功: "提交成功!感谢您的反馈" - - 失败: 显示具体错误信息 - -- ✨ **correction_page.dart: 新增邮箱复选框** (优先级1) - - 新增CupertinoCheckbox"包含邮箱地址",默认勾选 - - 取消勾选时不发送email字段到API - - 显示当前用户名和邮箱预览 - - 用户信息从authProvider获取 - -- 🎨 **correction_page.dart: emoji全部替换为CupertinoIcons** (优先级2) - - AppBar标题: "🔍 内容纠错" → "内容纠错" + 右侧clock_fill图标 - - 纠错类型: ❌→xmark_circle_fill, ✏️→pencil_circle_fill, 📭→tray_fill, 💡→lightbulb_fill - - 内容类型: 📖→doc_text_fill, 📝→textformat, 🔤→text_bubble_fill, 📜→book_fill, 📚→textformat_abc, 🧩→question_circle_fill - - 提交按钮: 📤→paperplane_fill, ✅→checkmark_circle_fill - - 选择芯片从emoji+文字改为Icon+文字布局 - -- ✨ **correction_page.dart: AppBar右侧新增纠错记录按钮** (优先级2) - - CupertinoNavigationBar trailing添加clock_fill图标按钮 - - 点击弹出CupertinoModalPopup底部弹窗显示纠错记录 - - 每条记录显示: 纠错类型、内容类型、source_id、状态标签(待处理/已处理/已拒绝)、时间 - - 空状态: doc_text_search图标 + "暂无纠错记录" - - 通过correctionProvider.loadCorrections()加载数据 +## 🏷️ 软件特性功能 (v6.6.133及更早版本已完成的特性) + +- 🏠 **主页** — 每日拾句/句子广场/下拉刷新动画/精灵角色互动/摇一摇换句 +- 🔍 **发现** — 会话流AI聊天/稍后读/闲情逸致/灵感/日签卡片/壁纸模板/进度追踪/工具中心 +- 👤 **我的** — 个人中心/收藏/历史/设备管理/内容纠错/文件传输 +- ⚙️ **设置** — 主题个性化/通用设置/权限管理/插件系统/实验性功能 +- 🎨 **设计系统** — 动态主题(亮/暗/AMOLED)/动态圆角/GlassContainer毛玻璃/统一设计令牌 +- 🔒 **隐私合规** — 协议同意后初始化权限/AndroidManifest自启动防护/外部跳转确认弹窗 +- 📱 **平台适配** — Android/iOS/鸿蒙/响应式布局/NFC文件传输 + +已归档版本 +v6.6.133(预测返回锁定+协议权限修复) / v6.6.132(隐私政策V6.6) / v6.5.131(FeatureFlag远程配置) / v6.5.130(稍后读句子修复) / v6.5.129(图片缓存管理) / v6.5.128(收藏不显示修复) / v6.5.127(纠错布局修复) / v6.5.126(闲情逸致热力图) / v6.5.125(外部跳转确认) / v6.5.124(稍后读图片修复) / v6.5.123(工具面板架构重构) / v6.5.122(导航配置数据驱动) / v6.5.121(引导页多语言) / v6.5.120(实验功能页面) / v6.5.119(协议联系信息) / v6.5.118(工具面板拆分) / v6.5.117(灵感iOS26重设计) / v6.5.116(日签卡片重构) / v6.5.115(协议信息更新) / v6.5.114(工具中心设置) / v6.5.113(多项功能修复) / v6.5.112(壁纸+权限) / v6.5.111(闲情逸致排版) / v6.5.110(稍后读+收藏修复) / v6.5.109(刷新动画+气泡修复) / v6.5.45(设置导出+高对比度+色弱) / v6.5.44(BottomSheet+离线预加载+知识图谱+手写字体) / v6.5.43(搜索引擎+搜索历史+TTS语言) / v6.5.42(安卓数据管理+鸿蒙应用锁) / v6.5.41(壁纸模板+数据管理修复) / v6.5.40(消息持久化+会话排序) / v6.5.39(离线预加载+引导页) / v6.5.38(翻译emoji+TTS sheet+AI助手头像) / v6.5.37(备份说明+字体勾选+翻译进度) / v6.5.36(引导页+编辑器) / v6.5.35(权限管理+日志滑动) / v6.5.34(UI文本变更) / v6.5.33(鸿蒙TTS适配) / v6.5.32(7项Bug修复) / v6.5.31(StreamProvider修复) / v6.5.30(EdgeTTS 403+Provider修复) / v6.5.29(小组件+Provider+壁纸+TTS) / v6.5.28(插件增强12修复+11功能) / v6.5.27(翻译+朗读插件) / v16.36.3(插件列表) / v16.36.2(翻译弹窗) / v16.36.1(OHOS崩溃修复) / v16.36.0(7项功能修复) / v16.35.0(性能优化8项) / 6.25.1(鸿蒙小组件跳转修复) / 6.25.0(鸿蒙端数据库+存储迭代修复) / 6.24.0(诗词设置页面) / 14.23.0(翻译助手) / 14.22.0(画布样式) / 14.20.0(屏幕共享WebRTC) / 14.19.0(画布协作) / 14.18.0(离线队列) / 14.17.0(USB传输) / 14.16.0(云端暂存) / 14.15.0(送达回执) / 14.14.0(断点续传) / 14.13.0(文件分流) / 14.12.0(信令服务器) / 14.11.0(配对码机制) / 14.10.0(雷达扫描) / 14.9.0(屏幕共享信令) / 14.8.0(画布同步) / 14.7.0(全流程E2E) / 14.6.0(翻译服务) / 14.5.0(诗词页面) / 14.4.0(天气诗词) / 14.3.0(编辑器增强) / 14.2.0(画布圆角) / 14.1.0(编辑器样式) / 14.0.0(传输架构重构) / 13.9.0(多语言) / 13.8.0(主题系统) / 13.7.0(设置重构) / 13.6.1(数据库修复) / 13.6.0(存储优化) / 13.4.0(本地化) / 13.3.0(HTTP明文) / 13.2.0(信令协议) / 6.4.1-6.4.5(鸿蒙端数据库+存储迭代修复) / 5.13.0(local_auth_ohos合并) / 5.10.0(SDK升级oh-3.41.9)新无响应+分类同步) / 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 \ No newline at end of file diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 01d35b34..0ebecffa 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -13,15 +13,13 @@ - - - - + + + + - diff --git a/docs/toolsapi/agreements/privacy-policy.html b/docs/toolsapi/agreements/privacy-policy.html index d6ba1d67..ce8649a6 100644 --- a/docs/toolsapi/agreements/privacy-policy.html +++ b/docs/toolsapi/agreements/privacy-policy.html @@ -261,9 +261,9 @@

闲言APP 隐私政策

-

版本号:V6.5

-

更新日期:2026年5月20日

-

生效日期:2026年5月21日

+

版本号:V6.6

+

更新日期:2026年5月30日

+

生效日期:2026年5月31日

弥勒市朋普镇微风暴网络科技工作室(以下简称"我们")深知个人信息对您的重要性,我们将按照法律法规的规定,保护您的个人信息及隐私安全。我们制定本隐私政策以帮助您了解我们如何收集、使用、存储和保护您的个人信息。本政策适用于闲言APP提供的所有服务。

零、定义

本隐私政策中使用的术语定义如下:

@@ -285,12 +285,17 @@
  • 设备信息:设备型号、操作系统版本、设备标识符、屏幕分辨率(用于兼容性优化和崩溃分析)
  • 应用信息:应用版本号、构建号(用于版本管理和功能适配)
  • 日志信息:崩溃日志、性能指标(用于提升应用稳定性)
  • +
  • 设备指纹信息:设备唯一标识符(device_id)、User-Agent,用于设备识别和安全验证
  • +
  • IP地址信息:您的IP地址及IP归属地,用于安全验证、异常登录检测和城市级位置服务
  • +
  • 互动行为信息:您的浏览记录、搜索关键词、点赞、收藏、分享、评论等互动行为,用于个性化推荐和服务优化
  • +
  • 阅读行为信息:阅读时长、阅读进度,用于阅读统计和个性化推荐
  • 1.2 您主动提供的信息

    • 账号信息:注册时提供的手机号/邮箱、昵称、头像
    • 个人偏好:主题设置、字体大小、阅读偏好等个性化配置
    • 用户内容:您发布的笔记、文章、评论等
    • +
    • 安全信息:密保问题和答案(加密存储),用于账号安全验证

    1.3 我们不会收集的信息

      @@ -421,10 +426,11 @@

      三、我们如何存储信息

      3.1 存储方式

        -
      • 本地存储:个人偏好设置存储在应用沙盒的 SharedPreferences 中
      • -
      • 缓存数据:内容缓存存储在应用临时目录,可随时清理
      • -
      • 结构化数据:收藏、笔记等存储在本地 SQLite 数据库
      • -
      • 服务端数据:账号信息、同步数据等存储在加密的云服务器
      • +
      • 本地存储:个人偏好设置存储在应用沙盒的 SharedPreferences 和 Hive 数据库中
      • +
      • 缓存数据:图片缓存、内容缓存存储在应用临时目录,可随时清理
      • +
      • 结构化数据:收藏、笔记、阅读历史等存储在本地 SQLite 数据库
      • +
      • 服务端数据:账号信息、用户资料、设备信息、互动记录、搜索历史、用户偏好画像等存储在云服务器MySQL数据库中
      • +
      • 云端暂存:加密文件通过云端暂存服务在设备间传输,采用端到端加密

      3.2 存储地域

      您的数据存储在中华人民共和国境内的服务器上。当前我们不会将您的个人信息传输至中华人民共和国境外。如未来因业务需要确需跨境传输,我们将按照法律法规要求进行安全评估并获得您的单独同意,并确保境外接收方的数据保护能力达到法律法规要求的标准。

      @@ -470,6 +476,26 @@ 账号存续期间 注销或关闭推送时删除 + +设备信息与IP地址 +账号存续期间 +注销后删除 + + +互动行为记录 +账号存续期间 +注销后删除,IP数据6个月后匿名化 + + +搜索历史 +账号存续期间 +注销后删除 + + +用户偏好画像 +账号存续期间 +注销后删除 +

      法律法规要求保留的日志信息,保留期限不超过6个月。超出上述期限后,我们将删除或匿名化处理您的个人信息。

      3.4 安全措施

      @@ -527,6 +553,13 @@ 用户认证、数据存储与同步 https://supabase.com/privacy + +WebRTC +Google LLC / 开源社区 +不额外收集个人信息 +局域网文件传输 +https://webrtc.org/privacy +

      说明:

        @@ -632,6 +665,7 @@
      • 邮箱:2821981550@qq.com
      • 应用内反馈:我的 → 关于 → 用户反馈
      • 通信地址:云南省昆明市西山区滇池度假区(碧鸡街道车家壁513号)
      • +
      • ICP备案号:滇ICP备2022000863号-18A

      我们将在15个工作日内回复您的隐私相关请求。

      个人信息保护负责人:李先生(邮箱:gg@0gg.cc)

      @@ -664,9 +698,9 @@