chore: 批量整理优化项目代码与配置

- 新增模型目录占位文件与翻译类型拆分
- 调整路由配置与桌面端窗口初始化
- 移除多处冗余图表配置项
- 重构右侧面板注册表与三栏布局组件
- 添加智能AppBar、拖拽书签等新功能组件
- 优化安卓编译配置与多平台插件注册
- 新增翻译覆盖率测试与共享组件
- 格式化代码与修复静态分析警告
This commit is contained in:
Developer
2026-05-29 10:08:02 +08:00
parent 5a49d20c8a
commit ca68fe29c7
105 changed files with 14839 additions and 5571 deletions

View File

@@ -4,6 +4,333 @@
***
## [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<T>` 返回值、`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 切换TabCtrl+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<String>`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<String>`
- `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中`<img>`标签的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
### ✨ 闲情逸致数据导入功能
@@ -255,246 +582,3 @@
- 每条记录显示: 纠错类型、内容类型、source_id、状态标签(待处理/已处理/已拒绝)、时间
- 空状态: doc_text_search图标 + "暂无纠错记录"
- 通过correctionProvider.loadCorrections()加载数据
## [v6.5.87] - 2026-05-29
### 🔧 功能完善 — 账户设置对话框验证流程与主题适配修复
- 🔧 **account_settings_page.dart: 绑定邮箱对话框验证流程完善** (优先级1)
- 新增密码验证方式: verifyMethod=='password'时显示密码输入框(obscureText:true)
- 新增回执验证说明: verifyMethod=='receipt'时显示"回执验证将发送验证请求到服务器,请确认您的身份"
- 分段控制器始终显示回执+密码选项,有密保时额外显示密保选项
- 确认按钮增加密码/密保答案非空校验传递password参数到UserSecurityService
- 🔧 **account_settings_page.dart: 绑定手机对话框新增验证步骤** (优先级1)
- 修复前: 仅输入手机号无任何验证直接提交
- 修复后: 新增验证方式选择器(回执/密保/密码),与邮箱对话框保持一致
- 转换为StatefulBuilder支持验证方式切换
- 🔧 **user_security_service.dart: changeEmail/changeMobile新增password验证** (优先级1)
- changeEmail: 新增password参数verifyMethod=='password'时发送oldpassword+回执
- changeMobile: 从仅回执验证扩展为支持receipt/sec_question/password三种验证方式
- 🐛 **change_password_page.dart: CupertinoSlidingSegmentedControl文字浅色主题不可见** (优先级2)
- 修复前: 分段控制器文字使用AppTypography.caption1无颜色浅色主题下可能不可见
- 修复后: 添加 color: ext.textPrimary 确保主题自适应
- 🐛 **security_question_page.dart: CupertinoSlidingSegmentedControl文字浅色主题不可见** (优先级2)
- 同上修复,添加 color: ext.textPrimary
-**account_settings_page.dart: Token Sheet新增复制按钮** (优先级2)
- Token预览行新增CupertinoButton(doc_on_clipboard图标)
- 点击复制完整Token到剪贴板显示"Token已复制到剪贴板"成功提示
- 新增_fullToken字段存储完整Token用于复制
## [v6.5.86] - 2026-05-29
### ✨ 功能完善 — 闲情逸致设置页与底部筛选栏优化
-**leisure_settings_page.dart: 提交收录功能实现** (优先级1)
- 修复前: "提交收录"按钮仅弹出"后续开发"空壳对话框
- 修复后: 实现完整提交流程 — CupertinoAlertDialog包含标题/描述/类型(美食/游玩)输入mock提交+成功toast
-**leisure_settings_page.dart: 新增反馈建议功能** (优先级2)
- 新增"互动"section包含"反馈建议"入口
- 弹出CupertinoAlertDialog + CupertinoTextField输入反馈内容mock提交+成功toast
- 🎨 **leisure_settings_page.dart: emoji全部替换为CupertinoIcons** (优先级2)
- _settingRow和_toggleRow参数从String emoji改为IconData icon
- 图标容器背景色改为accent半透明图标颜色使用accent统一iOS风格
- 12处emoji替换: 📐→square_grid_2x2, 🎨→paintbrush_fill, 📊→chart_bar_fill, 🛡→shield_fill, 🌓→tag, 🌅→sunrise_fill, ⚠→exclamationmark_triangle_fill, 📥→arrow_down_circle_fill, ⏱→clock_fill, 🗑→trash_fill, 📤→share_up, 📮→mail
- 🐛 **leisure_bottom_filter.dart: Wrap多行换行问题修复** (优先级1)
- 修复前: Wrap导致筛选标签换行到多行占用过多垂直空间
- 修复后: 使用SingleChildScrollView+Row实现水平滚动标签始终单行排列
## [v6.5.85] - 2026-05-29
### 🐛 Bug修复 — 闲情逸致卡片详情Sheet多项修复
- 🐛 **leisure_card_detail_sheet.dart: 信息网格布局不均匀** (优先级2)
- 修复前: GridView.count + childAspectRatio: 3 导致条件项(海拔/日出/日落/费用)显示不均匀
- 修复后: 使用 Wrap + LayoutBuilder 计算固定宽度,每个 item 使用 SizedBox 约束确保2列等宽一致高度
- 🐛 **leisure_card_detail_sheet.dart: 搜索按钮空回调** (优先级1)
- 修复前: "搜索"按钮 onTap 为空 `() {}`
- 修复后: 使用 context.appPush 导航到搜索页,传入卡片标题作为 keyword 参数
- 🐛 **leisure_card_detail_sheet.dart: 笔记按钮空回调** (优先级1)
- 修复前: "笔记"按钮 onTap 为空 `() {}`
- 修复后: 弹出 CupertinoAlertDialog + CupertinoTextField 输入笔记,保存到 leisureBookmarkProvider
- 🐛 **leisure_card_detail_sheet.dart: 外部搜索无错误处理** (优先级2)
- 修复前: launchUrl 无 try-catch失败时无反馈
- 修复后: try-catch 包裹 launchUrl失败时 AppToast.showError 提示
- 外部搜索按钮增加应用名称标签(百度/高德/大众点评/小红书/抖音)
- 🐛 **leisure_card_detail_sheet.dart: 点击空白区域无法关闭Sheet** (优先级2)
- showModalBottomSheet 添加 enableDrag: true + isDismissible: true + barrierColor
- DraggableScrollableSheet 添加 enableDrag: true
## [v6.5.84] - 2026-05-29
### 🔧 内存泄漏修复 — ref.listenManual 监听器未移除
- 🔧 **listenManual 监听器未移除导致内存泄漏** (优先级1)
- auth_aware_mixin.dart: 保存 ProviderSubscription 返回值Mixin 自动 override dispose() 关闭监听器,子类无需手动调用
- daily_fortune_page.dart: 保存 _authSubscription新增 dispose() 调用 close()
- reading_report_page.dart: 保存 _authSubscription新增 dispose() 调用 close()
- inspiration_page.dart: 保存 _toolCenterSubscription新增 dispose() 调用 close()
- 举一反三: 全局搜索 ref.listenManual 用法home_page.dart 已通过 _providerSubscriptions 正确处理,无需修改
### 🐛 Bug修复 — 插件数量计算逻辑错误
- 🐛 **general_settings_sections.dart: _countAvailablePlugins 返回数组长度而非启用数量** (优先级2)
- 修复前: `[bool, bool, bool].length` 始终返回 3无论插件是否启用
- 修复后: `[bool, bool, bool].where((e) => e).length` 仅统计启用的插件数量
- 影响: 设置页插件入口副标题显示 "3个可用" → 正确显示实际启用数量
## [v6.5.83] - 2026-05-28
### 🏗️ 架构重构 — 状态管理/资源管理/页面结构统一
- 🏗️ **AuthAwareMixin — 统一401认证处理** (优先级1)
- 新建 auth_aware_mixin.dart提供 onAuthChanged() 回调 + buildAuthErrorView() 登录引导UI + initAuthListener() 认证监听
- 所有需要认证的页面可通过 mixin 自动处理401→登录引导
- 新建文件: lib/shared/mixins/auth_aware_mixin.dart
- 🏗️ **AppScaffold — 统一页面骨架** (优先级1)
- 新建 app_scaffold.dart封装 CupertinoPageScaffold + CupertinoNavigationBar + AdaptiveBackButton 标准组合
- 支持 title/trailing/navigationBar/backgroundColor/safeAreaBottom/transparentNav 参数
- 新建文件: lib/shared/widgets/containers/app_scaffold.dart
- 🏗️ **StreamSubscription内存泄漏修复** (优先级1)
- chat_audio_service.dart: 3个音频播放订阅保存为成员变量play()前取消旧订阅
- home_provider.dart: 网络监听订阅保存并在dispose时取消
- transfer_signaling_handler.dart: 信令连接监听订阅保存并取消
- transfer_notifier.dart: 设备上线监听订阅保存并取消
- localsend_service.dart: 文件/文本接收监听订阅保存并取消
- online_tts_service.dart: 音频播放监听订阅保存并取消
- chat_provider.dart: _readlaterRefreshController 添加 close() 调用
- 🏗️ **GlobalKey Map无限增长修复** (优先级1)
- leisure_timeline_page.dart: _nodeKeys 在构建timeline前清理无效key
- 🏗️ **统一返回按钮为AdaptiveBackButton** (优先级2)
- login_page.dart: CupertinoButton → AdaptiveBackButton
- favorite_page.dart: CupertinoButton → AdaptiveBackButton
- app_lock_pin_setup.dart: CupertinoButton → AdaptiveBackButton
- app_lock_pattern_setup.dart: CupertinoButton → AdaptiveBackButton
- image_crop_page.dart: CupertinoButton → AdaptiveBackButton
- leisure_timeline_page.dart: 自定义返回按钮 → AdaptiveBackButton + maybePop()
## [v6.5.82] - 2026-05-28
### 🌐 多语言支持 — 发现/足迹/灵感页面
- 🌐 **新增TDiscover翻译类** (优先级2)
- translations.dart新增TDiscover类包含28个翻译键(browse/likes/favorite/readLater/notes/loginToSync/login/noInspiration/refresh/listView/gridView/pinned/conversations/pullDownTools/remark/originalName/remarkPlaceholder/saveRemark/loginRequired/comingSoon/browseHistory/likesHistory/myNotes/readLaterFull/makeCard/favoriteAction)
- TNav新增footprint/inspiration字段
- 全部11种语言(zh_CN/en/ja/zh_TW/es/ar/bn/hi/pt/ru/fr)均已添加翻译
- 修改文件: translations.dart
- 🌐 **发现页面多语言化** (优先级2)
- discover_page.dart中所有硬编码中文替换为t.xxx调用
- 包括: 发现/置顶/对话/备注/原始名称/保存备注/下拉工具中心/登录提示等
- 修改文件: discover_page.dart
- 🌐 **足迹页面多语言化** (优先级2)
- footprint_page.dart中FootprintTab枚举重构为动态label(TFootprintTabL10n扩展)
- 包括: 足迹/浏览/点赞/收藏/稍后/笔记/登录同步提示等
- 修改文件: footprint_page.dart
- 🌐 **灵感页面多语言化** (优先级2)
- inspiration_page.dart中所有硬编码中文替换为t.xxx调用
- 包括: 暂无灵感/刷新/浏览历史/点赞记录/我的收藏/稍后再读/我的笔记/列表/卡片/制作卡片/收藏等
- 修改文件: inspiration_page.dart
### 🐛 TextEditingController内存泄漏修复
- 🐛 **daily_fortune_page.dart** (优先级1)
- _onEdit中noteCtl移入dialog builder取消/保存时均调用dispose
- 修改文件: daily_fortune_page.dart
- 🐛 **discover_page.dart** (优先级1)
- _showRemarkDialog中controller在取消/保存时均调用dispose
- 修改文件: discover_page.dart
- 🐛 **translate_settings_page.dart** (优先级1)
- _showAddCustomApiDialog: 6个TextEditingController移入builder新增disposeAll()方法
- _showEditCustomApiDialog: 6个TextEditingController移入builder新增disposeAll()方法
- 修改文件: translate_settings_page.dart
## [v6.5.81] - 2026-05-28
### 🔧 硬编码修复 — 配置化重构
- 🔧 **插件数量动态计算** (优先级2)
- general_settings_sections.dart中'3个可用'硬编码改为从PluginState动态计算
- buildGeneralSettingSections新增pluginState参数功能扩展section从const改为动态构建
- 修改文件: general_settings_sections.dart, general_settings_page.dart
- 🔧 **运势Mock数据提取** (优先级2)
- fortune_provider.dart中_loadMockTodayData/_loadMockHistoryData/_mockRegenerate的Mock数据提取到独立文件
- 新建FortuneMockData类(buildMockToday/buildMockHistory/regenerate)provider仅调用
- 新建文件: fortune_mock_data.dart
- 修改文件: fortune_provider.dart
- 🔧 **注册运营信息配置化** (优先级2)
- login_page.dart中_showRegisterInfo的硬编码运营信息提取到RegisterConfig
- 新建RegisterConfig类(batchFlag/openPeriod/expireYear/serverNotice/channelNotice/usageNotice)
- 新建文件: register_config.dart
- 修改文件: login_page.dart
## [v6.5.80] - 2026-05-28
### 🐛 12项Bug批量修复
- 🐛 **Bug1: 阅读报告页面401报错无登录引导** (优先级1)
- service层捕获ApiException检测isAuthErrorprovider/page层增加isAuthError状态
- 未登录时显示登录引导界面,登录后自动重载报告数据
- 修改文件: reading_report_service.dart, reading_report_models.dart, reading_report_provider.dart, reading_report_page.dart
- 🐛 **Bug2: 每日运势页面卡死** (优先级1)
- loadAll()改为顺序执行_loadMockData()拆分为_loadMockTodayData()和_loadMockHistoryData()
- 监听authProvider变化登录后自动重新加载数据
- 修改文件: fortune_provider.dart, daily_fortune_page.dart
- 🐛 **Bug3: 闲情逸致页面月份头无吸顶效果** (优先级1)
- 重构为按月生成独立AppStickyHeaderSliver实现月份头吸顶
- 修改文件: leisure_timeline_page.dart
- 🐛 **Bug4: 闲情逸致页面日历跳转不工作** (优先级1)
- _scrollToDate添加延迟重试机制(_tryScrollToDate最多3次)
- 修改文件: leisure_timeline_page.dart
- 🐛 **Bug5: 工具中心页面误触发附近设备权限请求** (优先级2)
- connectivity_plus的PlatformException静默处理修复StreamSubscription未取消的内存泄漏
- 修改文件: tool_center_provider.dart
- 🐛 **Bug6: 灵感页面布局异常** (优先级2)
- 添加CupertinoPageScaffold+SafeArea包裹_QuickEntry的Expanded改为SizedBox(width:72)
- 修改文件: inspiration_page.dart
- 🐛 **Bug7: 足迹页面未登录无法查看本地记录** (优先级2)
- 移除登录拦截,改为同步提示横幅,始终显示本地数据
- 修改文件: footprint_page.dart
- 🐛 **Bug8: 发现页面列表按钮之间缺少分隔线** (优先级2)
- 添加极细分隔线(thickness:0.3, alpha:0.08),不仔细看看不出来
- 修改文件: discover_page.dart
- 🐛 **Bug9: 通用设置页面插件数量不正确** (优先级2)
- '2个可用' → '3个可用'
- 修改文件: general_settings_sections.dart
- 🐛 **Bug10: 注册页面AppBar位置不正确+增加info icon** (优先级2)
- 返回按钮改为标准CupertinoNavigationBar注册模式右侧增加info icon显示注册须知
- 修改文件: login_page.dart
- 🐛 **Bug11: 账户设置CupertinoSlidingSegmentedControl断言错误** (优先级1)
- 无密保时添加'🔑 密码'备选验证方式确保children≥2
- 修改文件: account_settings_page.dart
- 🐛 **Bug12: 语言选择页面文案修改** (优先级3)
- '协同翻译' → '自定义翻译'
- 修改文件: translations.dart
### 🔧 审计修复
- reading_report_page/daily_fortune_page: build()中修改状态改为ref.listenManual监听auth变化
- tool_center_provider: StreamSubscription保存并在dispose时取消修复内存泄漏
## [v6.5.77] - 2026-05-28