chore: 批量整理优化项目代码与配置
- 新增模型目录占位文件与翻译类型拆分 - 调整路由配置与桌面端窗口初始化 - 移除多处冗余图表配置项 - 重构右侧面板注册表与三栏布局组件 - 添加智能AppBar、拖拽书签等新功能组件 - 优化安卓编译配置与多平台插件注册 - 新增翻译覆盖率测试与共享组件 - 格式化代码与修复静态分析警告
This commit is contained in:
570
CHANGELOG.md
570
CHANGELOG.md
@@ -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 切换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<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检测isAuthError,provider/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
|
||||
|
||||
Reference in New Issue
Block a user