本次提交完成多项核心更新: 1. 新增闲情逸致功能模块,包含时间线、收藏标注、季节主题等基础框架 2. 替换hive为社区维护的hive_ce包,修复依赖兼容问题 3. 统一替换"开发中"提示为"当前设备不支持",优化用户提示文案 4. 新增多项功能开关与特性标志,统一管理不可用功能提示 5. 完善用户账户洞察系统,新增头像审核中状态检测 6. 优化TTS语音朗读服务,修复Android端引擎初始化问题 7. 重构知识图谱缩放手势逻辑,解决缩放不跟手问题 8. 新增精灵头像组件,替换默认聊天头像样式 9. 新增外部链接跳转确认弹窗,提升使用安全性 10. 升级后端API接口,新增签到配置获取与补签积分规则动态读取 11. 完善多语言翻译覆盖率限制,非中文语言仅显示最高50%进度 12. 新增HTTP缓存拦截器,优化网络请求性能 13. 新增恢复出厂设置选项,完善数据管理功能 同时修复了多处代码细节问题:简化字符串拼接、优化布局代码、移除多余代码等。
45 KiB
Changelog
所有重要变更均记录于此文件。格式基于 Keep a Changelog。
[v6.5.67] - 2026-05-27
闲情逸致模块:Phase E — Hive存储+FlChart图表+滑动操作+地图标记+社交占位(5项)
-
🗄️ 任务1: Hive Box直接存储替代KvStorage JSON序列化 (优先级5)
kv_storage.dart: HiveBoxNames新增leisurebox命名空间,加入all列表自动初始化leisure_bookmark_provider.dart: 移除dart:convert和KvStorage依赖,改用hive_ce/hive.dart直接读写_loadFromStorage()→_loadFromHive(): 从 Hive.box('leisure') 读取 Map 结构数据,逐条反序列化为 LeisureBookmark_saveToStorage()→_saveToHive(): 将 bookmarks Map 序列化后直接 box.put() 存储,无需 JSON 中转- 优势:Hive Box 原生存储比 JSON 序列化更高效,支持增量更新,减少序列化/反序列化开销
-
📊 任务2: FlChart统计图表 (优先级4)
leisure_settings_page.dart: 新增fl_chartimport,统计卡片下方新增两个图表_buildBookmarkTrend(): 7日收藏趋势折线图(LineChart),曲线+渐变填充+主题色_buildMonthDistribution(): 季节卡片分布饼图(PieChart),春夏秋冬四色+图例标签_legendItem(): 饼图图例组件(圆点+emoji标签+计数)
-
👆 任务3: 卡片左滑收藏、右滑分享 (优先级5)
leisure_card.dart: 导入AppSlidable,整个卡片用 AppSlidable 包裹- 左滑操作: SlideActionType.bookmark → toggleBookmark
- 右滑操作: SlideActionType.share → LeisureShareSheet.show
- borderRadius: AppRadius.lgBorder 保持圆角一致
-
🗺️ 任务4: 卡片详情Sheet查看地图按钮 (优先级4)
leisure_card_detail_sheet.dart: _buildInfoGrid 下方新增 _buildMapButton- 点击跳转高德地图搜索:
https://uri.amap.com/search?keyword=省份+地点 - 使用 url_launcher LaunchMode.externalApplication 打开外部地图
-
📮 任务5: 社交互动占位模块优化 (优先级3)
leisure_settings_page.dart: "提交收录"弹窗内容优化- 标题增加 📮 emoji,内容改为更详细说明(发现好的花期/美食/景点?提交后经审核可加入时间线。此功能需要登录后使用,后续开发。)
[v6.5.66] - 2026-05-27
闲情逸致模块:Phase D — 天气集成+粘性月份头+懒加载+日历视图(4项)
-
🌤️ 任务1: 天气API集成 (优先级5)
leisure_node.dart: LeisureNode freezed模型新增3个可选字段weatherIcon/weatherTemp/weatherDesc,同步更新toJson()和fromJson()leisure_timeline_provider.dart: 新增_fetchWeatherBrief()方法,初始化完成后异步获取天气信息并更新今日节点leisure_timeline_provider.dart: 新增ensureMonthLoaded()方法供懒加载调用leisure_date_node.dart: 季节标签下方新增天气图标+温度显示(weatherIcon weatherTemp°)
-
📌 任务2: 粘性月份头部 (优先级5)
leisure_timeline_page.dart: 重构_buildTimeline()方法,按月份分组显示节点- 新增
_buildMonthHeader()方法:季节色标签 + 月份名称 + 节点计数 - 月份头部使用
LeisureSeasonColors季节色 +AppRadius.lgBorder圆角标签样式
-
🔍 任务3: 懒加载 — VisibilityDetector (优先级5)
leisure_timeline_page.dart: 月份头部包裹VisibilityDetector,可见比例>10%时触发ensureMonthLoaded()leisure_timeline_provider.dart:ensureMonthLoaded()检查loadedMonths避免重复加载
-
📅 任务4: 月视图日历模式切换 (优先级4)
- 新建
leisure_calendar_view.dart: 月视图日历组件,显示当月日期网格 - 有卡片数据的日期高亮(季节色半透明背景),今日使用主题色圆形标记
leisure_timeline_page.dart: AppBar新增日历切换按钮(CupertinoIcons.calendar/CupertinoIcons.list_bullet)- 新增
_showCalendar状态控制日历视图展开/收起
- 新建
[v6.5.65] - 2026-05-27
闲情逸致模块:Phase C — 骨架屏+液态玻璃+图标替换(4项)
-
🦴 任务1: 骨架屏替换 ActivityIndicator (优先级5)
leisure_timeline_page.dart: 将加载状态的CupertinoActivityIndicator()替换为自定义骨架屏_buildSkeleton()- 骨架屏模拟时间线布局:日期节点 + 左吃右玩双列卡片占位,两组骨架
- 使用
Shimmer.fromColors实现闪烁动画,深色/浅色模式自动适配颜色
-
🪟 任务2: 液态玻璃效果增强 (优先级5)
leisure_card_detail_sheet.dart: Sheet容器外层包裹ClipRect+BackdropFilter(blur: 25),背景色改为ext.bgCard.withOpacity(0.85)半透明leisure_bottom_filter.dart: 底部筛选栏添加ClipRect+BackdropFilter(blur: 20)毛玻璃效果leisure_timeline_page.dart: AppBar区域添加ClipRect+BackdropFilter(blur: 20)半透明导航栏效果(类似iOS导航栏)
-
🎨 任务3: SVG图标替换emoji — LeisureIcons图标映射 (优先级4)
- 新建
leisure_icons.dart: 统一图标映射类,优先使用CupertinoIcons- 卡片类型: food(star_fill)/play(compass)
- 操作按钮: bookmark/bookmarkOutline/share/search/note
- 信息图标: location/altitude/sunrise/sunset/price/risk/weather/calendar
- 季节emoji保留: 🌿☀️🍂❄️(CupertinoIcons无对应)
- 价格类型: free(gift)/paid(money_dollar_circle)/commercial(storefront)
leisure_card.dart:_buildHeader中🍜吃/🎯玩→Icon+文字,_buildActions中🔖收藏/📤分享→Icon+文字leisure_card_detail_sheet.dart:_buildInfoGrid中📍🏔️🌅🌇→CupertinoIcons,_buildActionButtons中🔖📤🔍📝→CupertinoIcons
- 新建
-
✅ 任务4: 错误状态UI和空状态UI确认 (优先级5)
- Phase A(v6.5.63)已实现
_buildErrorState和_buildEmptyState,确认无需额外修改
- Phase A(v6.5.63)已实现
[v6.5.64] - 2026-05-27
闲情逸致模块:分享卡片Sheet — 3种样式预览+生成图片+系统分享+保存相册
-
📤 新增 LeisureShareSheet 分享卡片Sheet (优先级4)
leisure_share_sheet.dart: 新建文件,底部Sheet弹出3种分享卡片样式预览- 渐变头图(gradient): 季节色渐变背景 + emoji + 标题 + 日期 + 描述
- 图片卡片(photo): 白色卡片 + emoji + 标题 + 地点 + 标签
- 极简诗意(minimal): 大字诗句风格 + 描述 + 日期 + 署名
- 使用 RepaintBoundary + toImage() 生成图片(复用项目已有模式)
- share_plus 系统分享 + gal 保存到相册
- 样式切换选择器 + 分享/保存/关闭操作按钮
- 处理中状态防重复点击 + 权限请求
-
🔗 连接分享入口
leisure_card_detail_sheet.dart: 分享按钮调用 LeisureShareSheet.show()leisure_card.dart: 分享按钮调用 LeisureShareSheet.show()(node暂传null)
[v6.5.63] - 2026-05-27
闲情逸致模块:Phase A — 设置生效+设计令牌+freezed改造+季节色覆盖+错误/空状态(6项)
-
🔧 任务1: 设置在组件中生效 (优先级5)
leisure_card.dart: 读取LeisureSettings的cardRadius/cardSize/cardStyle设置并应用cardRadius→ 动态BorderRadius.circular(settings.cardRadius)cardSize→ compact(间距减半)/standard(默认)/spacious(间距加倍) 三档padding切换cardStyle→ exquisite(圆角+阴影+左边框)/flat(无阴影+简单分割线)/photo(预留) 三种风格切换
leisure_card_row.dart: 根据activeFilters过滤卡片(美食/花期/高海拔/风险/免费/付费/日出/观海),新增node参数用于日出筛选leisure_timeline_page.dart:LeisureCardRow调用传入node参数
-
🎨 任务2: 设计令牌替换硬编码值 (优先级5)
- 6个文件全面替换硬编码间距/圆角/字号为
AppSpacing/AppRadius/AppTypography令牌 leisure_card.dart: BorderRadius→AppRadius、SizedBox→AppSpacing、fontSize删除使用AppTypography默认字号leisure_card_row.dart: SizedBox/EdgeInsets→AppSpacing令牌leisure_date_node.dart: BorderRadius→AppRadius、SizedBox→AppSpacing、EdgeInsets→AppSpacingleisure_bottom_filter.dart: BorderRadius→AppRadius、spacing/runSpacing→AppSpacing、EdgeInsets→AppSpacingleisure_card_detail_sheet.dart: Radius→AppRadius、SizedBox→AppSpacing、EdgeInsets→AppSpacingleisure_timeline_page.dart: SizedBox→AppSpacing、EdgeInsets→AppSpacing、BorderRadius→AppRadiusleisure_settings_page.dart: SizedBox→AppSpacing、BorderRadius→AppRadius、EdgeInsets→AppSpacing
- 6个文件全面替换硬编码间距/圆角/字号为
-
🏗️ 任务3: 状态管理统一 — freezed改造 (优先级5)
leisure_timeline_provider.dart:LeisureTimelineState改为@freezed模型,保留计算属性todayNode/todayIndex/recentNodes在私有构造函数中leisure_bookmark_provider.dart:LeisureBookmarkState改为@freezed模型,保留计算属性getBookmark/isBookmarked/getCheckedItems/allBookmarked
-
⚙️ 任务4: 设置页新增infoDensity/riskLevel/updateFrequency UI (优先级4)
leisure_settings_page.dart: "显示设置"分组新增 📊信息密度(紧凑/标准/详细)、🛡️风险等级(全部/高海拔/边境/无) 选择器- "数据管理"分组新增 ⏱️更新频率(实时/每日/每周) 选择器
-
🌈 任务5: LeisureSeason.colorHex与index.json.seasonColors打通 (优先级5)
leisure_node.dart: 新增LeisureSeasonColors运行时季节色覆盖类(applyFromIndex/getColor/clear)leisure_date_node.dart:LeisureSeason.parseColor(season.colorHex)→LeisureSeasonColors.getColor(season)leisure_card_detail_sheet.dart: 同上替换leisure_timeline_provider.dart:_init()加载索引后调用LeisureSeasonColors.applyFromIndex(index.seasonColors)
-
🛡️ 任务6: 错误状态UI + 空状态UI (优先级5)
leisure_timeline_page.dart: 新增_buildErrorState(😵+错误信息+重试按钮)和_buildEmptyState(🌸+暂无数据+刷新按钮)_buildBody方法按优先级判断:错误→空→加载中→正常
[v6.5.62] - 2026-05-27
闲情逸致模块:完整功能开发 + 审计修复(Phase 1-4 全部完成)
-
🆕 新增闲情逸致(leisure)完整功能模块 (优先级5)
- 数据层: 6个freezed模型(LeisureCard/Node/Settings/Bookmark/Index/Patch) + 数据服务(LeisureDataService) + 按月JSON数据(12个月67个节点) + 增量补丁 + 服务器推送示例
- 状态层: 3个Riverpod Provider(Timeline/Settings/Bookmark) + KvStorage持久化
- UI层: 时间线主页面(中轴线+左吃右玩+今日分割线+自动定位) + 设置页面(统计/显示/数据管理) + 卡片详情Sheet(可拖拽+信息网格+操作按钮+标注+外部搜索) + 日期节点/今日分割线/卡片组件/卡片行/底部筛选栏
- 路由:
/leisure+/leisure/settings子路由注册,灵感页入口会话连接 - HTML原型: 4个页面原型(timeline/settings/share_card/card_detail)
- 设计文档: 设计文档 + 开发文档(归档清单/验收标准/开发日志)
- pubspec.yaml: 新增
assets/data/leisure/资源注册
-
🔧 审计修复 (优先级5)
- 修复Critical: onCardTap回调连接LeisureCardDetailSheet、pubspec.yaml注册leisure assets、JSON解析异常保护(int.tryParse+类型安全遍历)、删除重复SwapButton组件
- 修复Major: 硬编码颜色统一到LeisureSeason.parseColor()、copyWith error字段逻辑修复(clearError参数)、deprecated activeColor→activeTrackColor、类型推断警告修复(showCupertinoModalPopup/showCupertinoDialog)
- LeisureSeason新增parseColor()静态方法,季节色从枚举colorHex统一解析,消除3处重复定义
[v6.5.61] - 2026-05-27
闲情逸致模块:数据模型层创建(6项)
- 🆕 新增闲情逸致(leisure)模块数据模型 (优先级4)
leisure_card.dart: 时间线卡片模型 — LeisureCard(吃/玩卡片)+ LeisurePriceType枚举(free/paid/commercial/unknown),extension提供hasRisk/isHighAltitude/priceLabel/toJson/fromJsonleisure_node.dart: 时间线每日节点模型 — LeisureNode(日期+吃/玩卡片)+ LeisureSeason枚举(spring/summer/autumn/winter含颜色hex)+ LeisureCards容器,extension提供allCards/hasCards/displayDate/hasRiskCards/toJson/fromJsonleisure_settings.dart: 时间线显示设置模型 — LeisureSettings(卡片大小/圆角/样式/季节标签/日出日落/风险警告/筛选/分享样式/信息密度/风险等级/更新频率)leisure_bookmark.dart: 收藏标注模型 — LeisureBookmark(卡片ID/收藏状态/勾选项/笔记关联)leisure_index.dart: 数据索引模型 — LeisureIndex(可用年月/季节颜色/风险等级/价格类型)+ LeisureServerSync(服务器同步配置)leisure_patch.dart: 增量补丁模型 — LeisurePatch(版本/来源/操作列表)+ LeisurePatchOperation(add/update操作)+ LeisurePatchOp枚举build.yaml: 新增lib/features/tool_center/leisure/**/*.dart到 freezed generate_for 范围- 所有模型遵循 sealed class + @freezed + const factory 规范,手动实现 toJson/fromJson(不使用 json_serializable)
[v6.5.60] - 2026-05-27
翻译助手持久化迁移:Hive KV → Drift SQLite(1项)
- 🏗️ 翻译助手会话消息持久化从 Hive KV 迁移到 Drift SQLite (优先级5)
app_database.dart: 新增TranslateSessionMessages表和TranslateFavorites表,schemaVersion 15→16app_database.dart: 新增 CRUD 方法:insertSessionMessage, insertSessionMessageBatch, getSessionMessages, updateSessionMessage, clearSessionMessages, insertFavorite, getFavoriteMessageIds, isFavorite, removeFavorite, clearFavorites, getTranslateFavoriteCounttranslate_provider.dart: 移除所有KvStorage/HiveBoxNames.translateHistory调用,改用AppDatabase.instance的 Drift 方法translate_provider.dart:_readHistorySync()/_readSessionMessagesSync()改为异步_loadHistoryFromDrift()/_loadSessionFromDrift(),通过Future.microtask在build()中初始化translate_provider.dart:_saveHistory()/_saveSessionMessages()改为 Drift 全量替换策略translate_provider.dart:toggleFavorite()改为 Drift 增量操作translate_provider.dart:clearHistory()/clearMessages()改为 Drift 删除kv_storage.dart: 从HiveBoxNames.all列表移除translateHistory(保留常量定义以防旧数据迁移)- 统一双存储体系:翻译助手会话消息+收藏 → Drift SQLite,翻译简略记录 → Drift SQLite(已有 TranslateRecords 表)
[v6.5.59] - 2026-05-27
架构改进:补签积分动态化 + FeatureFlag统一管理(2项)
-
🔧 改进1: 补签消耗积分从coin_rule读取 (优先级5)
UserCenter.php:$makeupCost = 10硬编码改为从coin_rule表signin_makeup规则动态读取,fallback默认值10UserCenter.php: 新增signin_config()API接口,返回makeup_cost配置user_center_service.dart: 新增getSigninConfig()静态方法,signinMakeup()返回值改为Map<String, dynamic>signin_provider.dart:SigninState新增makeupCost字段(默认10),SigninNotifier新增loadSigninConfig()方法在build()时自动加载signin_page.dart: 替换所有硬编码10为ref.read(signinProvider).makeupCost(消耗积分显示、积分不足判断、提示文案等6处)
-
🚩 改进2: 创建 FeatureFlag 服务统一管理功能可用性 (优先级5)
- 新增
feature_flag_service.dart: 定义15个 FeatureFlag 枚举(nearbyDiscovery/shaderBackground/exportTranslate/ttsRead/importChat/downloadWallpaper/editWithApp/privateMessage/tagDelete/shareSentence/forwardMessage/handwritingFont/qrScan/quickTransfer/payment) - 每个 FeatureFlag 包含 id/title/unsupportedMessage/isEnabled 属性
- 提供
FeatureFlagService.check(context, flag)静态方法:未启用时弹出 CupertinoAlertDialog - 提供
featureFlagProviderRiverpod Provider general_settings_page.dart:isPlaceholder逻辑改为使用FeatureFlagService.fromSettingId()+FeatureFlagService.isPlaceholder(),弹窗文案使用 FeatureFlag.unsupportedMessage- 10个页面的"设备不支持"硬编码替换为 FeatureFlag.unsupportedMessage:
profile_page.dart: 通用扫码/面对面快传/收付款public_profile_page.dart: 私信tag_cloud_page.dart: 标签删除nearby_users_sheet.dart: 分享句子transfer_chat_page.dart: 转发消息translate_settings_page.dart: 导出翻译translate_page.dart: 朗读功能chat_settings_page.dart: 导入会话wallpaper_preview_sheet.dart: 下载壁纸/编辑器应用font_online_widgets.dart: 手写字体tool_panel.dart: 分享工具
- 新增
[v6.5.58] - 2026-05-27
Shimmer骨架屏占位 + Dio HTTP缓存拦截器(2项)
-
✨ 改进1: Shimmer骨架屏配合CachedNetworkImage做加载占位 (优先级4)
shimmer_placeholder.dart: 新增统一Shimmer占位组件,提供4种工厂构造ShimmerPlaceholder.image()— 图片占位(圆角矩形)ShimmerPlaceholder.card()— 卡片占位(标题+内容行)ShimmerPlaceholder.avatar()— 头像占位(圆形)ShimmerPlaceholder.listItem()— 列表项占位(头像+标题+副标题)
- 使用AppTheme主题色,iOS风格Cupertino颜色体系
- 深色/浅色模式自动适配baseColor和highlightColor
safe_cached_image.dart: 集成ShimmerPlaceholder- CachedNetworkImage的placeholder默认使用ShimmerPlaceholder.image()
- progressIndicatorBuilder中叠加Shimmer占位+进度指示器
- errorWidget降级路径也使用Shimmer占位替代空白/SizedBox.shrink
- Image.network降级路径同样使用Shimmer占位
-
🗄️ 改进2: dio_cache_interceptor配合Dio做接口缓存 (优先级4)
pubspec.yaml: 新增dio_cache_interceptor ^3.5.0 + dio_cache_interceptor_file_store ^1.2.3cache_config.dart: 新增HTTP缓存配置- GET请求默认缓存5分钟,特定接口自定义时长(句子10分钟/分类30分钟/天气15分钟等)
- 排除需要实时数据的接口(登录/注册/签到/上传等9个路径)
- 使用文件系统存储缓存(FileCacheStore)
- 提供clearAll/cleanExpired/forceRefreshOptions方法
api_client.dart: 集成缓存拦截器- 新增initCache()异步初始化方法,App启动时调用
- GET方法新增useCache/forceRefresh参数控制缓存行为
- _buildCacheOptions根据路径自动判断缓存策略
- 保留原有LogInterceptor和ApiInterceptor
app.dart: 在initState中调用ApiClient.instance.initCache()
[v6.5.57] - 2026-05-27
深度链接统一架构 + 工具中心权限异常处理(2项)
-
🔗 改进1: 使用 app_links 统一深度链接处理架构 (优先级4)
app_router.dart: 将_resolveDeepLinkPath私有方法提取为AppRouter公共静态类- 新增
AppRouter.resolveDeepLinkUri(Uri)统一入口,支持 xianyan:// scheme 和 https:// 通用链接 - 合并
deep_link_service.dart中独立的路径映射逻辑(_resolveCustomScheme/_resolveHttps/_resolveToolPath/_resolveSettingsPath)到AppRouter类中 - 消除两套不一致的路径映射:原来
deep_link_service.dart和app_router.dart各有独立映射,容易遗漏和不同步 deep_link_service.dart: 重构为使用AppRouter.resolveDeepLinkUri()单一数据源,删除所有重复的_resolve*方法- 新增
_getInitialLinkSafely()安全获取初始链接,捕获PlatformException - 新增
_pendingLink+_schedulePendingNavigation()延迟导航机制,解决冷启动时 Context 不可用问题 - 新增
dispose()资源释放方法,正确取消 StreamSubscription _handleDeepLinkRedirect简化为调用AppRouter.resolveDeepLinkUri(),逻辑统一
-
🛡️ 改进2: 工具中心 connectivity_plus 权限异常处理 (优先级4)
tool_center_provider.dart:_initConnectivity()添加PlatformException捕获- Android 12+ 附近设备权限未授予时,
connectivity_plus会抛出PlatformException,原来会被通用 catch 吞掉 - 新增
needsPermissionCheck状态标志,权限异常时设为 true,供 UI 层显示提示 - 新增
clearPermissionCheck()方法,用户处理权限后调用可重新初始化网络检测 - 网络状态监听流也添加
PlatformException保护,避免监听注册时崩溃 - 举一反三:
ConnectivityService.init()同样存在此风险,但该服务在 main.dart 中已有 try-catch 保护
[v6.5.56] - 2026-05-27
句子详情Sheet修复(2项)
-
🔍 修复1: "创作"按钮改为"外部搜索"按钮 (优先级4)
sentence_detail_sheet.dart: 将"🎨 创作"按钮改为"🔍 外部搜索"按钮- 点击逻辑:内置搜索时关闭Sheet并跳转搜索页,外部搜索时调用
SearchEngineService.instance.search()打开浏览器 - 搜索失败时弹出错误提示
-
🎯 修复2: Sheet弹出时下层页面缩放效果不生效 (优先级5)
page_transitions.dart: 修复_ScaledGlassSheetRoute.delegatedTransition核心bug- 根因:
delegatedTransition回调中错误使用animation参数(前一路由已完成,值恒为1.0),应使用secondaryAnimation(表示前一路由被新路由覆盖的程度,0.0→1.0) - 将
AnimatedBuilder监听对象从animation改为secondaryAnimation - 缩放因子从 0.05 增大到 iOS 实测值 0.0835(
kSheetScaleFactor),还原原生 iOS Sheet 压制效果 - 参考
CopiedCupertinoSheetTransitions.secondarySlideDownTransition的正确实现模式
[v6.5.56] - 2026-05-27
闲情逸致时间线数据扩展 + HTML原型决策选项(2项)
-
📊 任务1: leisure_timeline.json 数据扩展 (优先级4)
leisure_timeline.json: 节点从26个扩展到67个,覆盖全年每月4-7个节点- 版本号从 1.0.0 升级到 1.1.0
- 新增41个节点:1月(2)、2月(3)、3月(3)、4月(3)、5月(3)、6月(3)、7月(4)、8月(3)、9月(4)、10月(4)、11月(4)、12月(4)
- 每个节点包含 food/play 双卡片,完整字段:date/month/day/weekday/isWeekend/season/sunrise/sunset/cards
- 风险提示规则严格执行:西藏/新疆/青海海拔>3000m标注"极高海拔"+"高原反应"、云南海拔>2000m标注"高原紫外线强"、边境地区标注"边境地区"、黑龙江冬季标注"极寒-XX℃"、野生菌标注"野生菌中毒风险"
- 新增景点:长白山天池、武大樱花、平坝樱花、伊犁杏花、紫藤花、海棠花、格桑花、稻城野花、九顶山野花、阿里观星、篁岭皇菊、塔川红叶、本溪红叶、峨眉山赏月、腾冲银杏、海螺沟冰川、长白山滑雪等
- 新增美食:春笋、菠萝、樱桃、杨梅酒、向日葵、榴莲、六月黄、桂花、砂糖橘、沃柑等
-
🎨 任务2: HTML原型决策选项更新 (优先级4)
leisure_timeline.html: 新增决策选项区域(swap按钮下方)- 卡片样式切换:精致卡片 / 扁平简约 / 图文卡片(CSS类切换)
- 布局方向切换:中轴对称 / 左线右卡(CSS类切换)
- 季节色主题:春🌿 夏☀️ 秋🍂 冬❄️(CSS变量切换)
- 暗色模式切换:🌙 toggle按钮(body.dark-mode类切换)
- 搜索按钮:弹出搜索选项面板(百度/高德/大众点评/小红书/抖音)
- 设置按钮:跳转 leisure_settings.html
leisure_settings.html: 新增决策选项区域- 分享卡片样式:渐变头图 / 图片卡片 / 极简诗意(带预览缩略图)
- 默认打开位置:今日 / 最近有数据 / 上次浏览位置
- 卡片信息密度:紧凑 / 标准 / 宽松
- 风险提示级别:仅高危 / 全部 / 关闭
- 数据更新频率:每次打开 / 每日 / 手动
- 返回按钮跳转 leisure_timeline.html
leisure_share_card.html: 返回按钮跳转 leisure_timeline.html
[v6.5.55] - 2026-05-27
签到补签积分不足提醒 + 注册赠送积分金币(2项)
-
🐛 修复1: 签到补签积分不足提醒增强 (优先级5)
signin_page.dart: 补签对话框新增"当前积分"行,积分≥10显示绿色、<10显示红色signin_page.dart: 确认补签前前置检查积分,不足时弹出"积分不足"警告对话框,提示"补签需要10积分,当前积分: X"signin_page.dart: 补签失败时弹出错误对话框,显示具体错误信息(如"该日期已签到"等)signin_provider.dart:signinMakeup()增加isLoading状态管理,防止重复点击signin_provider.dart: 补签成功后调用refreshUser()刷新用户积分数据- 举一反三:后端
signin_makeup已有积分不足校验,前端增加前置检查减少无效请求,双重保障
-
🎁 修复2: 用户注册自动赠送50积分和50金币 (优先级4)
UserSecurity.php:register()方法注册成功后,赠送50积分+50金币,写入coin_log日志auth_provider.dart: 注册成功后调用refreshUser()刷新用户信息,确保前端显示最新积分/金币- 赠送逻辑在后端处理,前端仅负责刷新展示,保证数据一致性
[v6.5.54] - 2026-05-27
账户设置页面修复(2项)
-
🐛 修复1: 个性签名行无法点击编辑 (优先级4)
account_settings_page.dart: 将"个性签名"从纯展示组件_InfoRow改为可交互组件_ActionRow- 添加
onTap回调,点击后弹出EditFieldBottomSheet(field: 'bio')编辑弹窗 - 新增
_showEditBioSheet()方法,使用showCupertinoModalPopup展示编辑弹窗 - trailing 显示当前签名内容,未填写时显示"未填写"
-
🐛 修复2: 去掉手机号待验证标识 (优先级3)
account_settings_page.dart: 移除手机号行的_buildVerifyBadge验证徽章- 简化 trailing 从 Row(徽章+文本) 改为纯 Text 组件,仅显示手机号或"未绑定"
- 邮箱验证徽章保留不变
[v6.5.53] - 2026-05-27
日签卡片"换一句"移入卡片 + 语言覆盖率显示上限(2项)
-
🔄 修改1: 日签卡片"换一句"按钮移入卡片内部,改为刷新同类型内容 (优先级4)
daily_card_page.dart: 将"换一句"按钮从导航栏trailing移到卡片右上角叠加层(Stack+Positioned),按钮位于RepaintBoundary外部不影响导出图片daily_card_provider.dart: 新增refreshCurrentType()方法,点击"换一句"时从服务端获取同类型新内容(如当前是诗词则获取新诗词),不再循环切换类型- 新增
_fetchByType()辅助方法,根据 DailyContentType 调用 DailyCardService 对应的 fetch 方法 - 保留
nextContent()方法供内容类型选择器使用 - 按钮样式:毛玻璃半透明背景 + 循环箭头图标 + 主题色文字
-
📊 修改2: 语言选择页面非中文语言覆盖率显示不超过50% (优先级3)
language_settings_page.dart:_buildCoverageRow方法中,对非中文语言(zh_CN/zh_TW以外的语言)的显示百分比做clamp(0, 50)上限处理- 中文语言(简体/繁体)保持原始百分比显示不变
- 仅影响UI显示层,不修改底层
_progressOverride数据
[v6.5.53] - 2026-05-27
主页下拉面板交互优化(3项)
-
🐛 修复1: 下拉阈值太低容易误触 (优先级4)
home_refresh_indicator.dart: 将_triggerThreshold从 40.0 增加到 80.0,需要更长的下拉距离- 将触发条件从
newProgress >= 0.3改为newProgress >= 0.7,需要拉得更远才触发面板 - 触发面板打开时添加
HapticService.medium()震动反馈 - 同步更新表情阈值:love(≥0.7)、idle(<0.2)、surprise(<0.4)、think(其他)
- 防止重复触发:添加
!_hasReachedThreshold条件判断
-
🐛 修复2: 面板弹出后上下滑无法收起 (优先级4)
home_tool_center.dart: 在_FloatingPanel面板组件中添加垂直滑动手势检测- 新增
_verticalDragDelta累计垂直滑动距离,_dismissDragThreshold = 50.0为收起阈值 - 用户在面板上向上或向下滑动超过 50px 时,自动调用
_dismiss()收起面板 - 收起时添加
HapticService.light()轻震动反馈
[v6.5.52] - 2026-05-27
知识图谱缩放跟手修复 + 个人中心LV标签对齐(2项)
-
🐛 修复1: 知识图谱缩放不跟手,速度过快 (优先级5)
knowledge_graph_page.dart: 修复缩放手势处理,使用增量缩放替代直接乘法knowledge_graph_canvas.dart: 同步修复缩放手势处理- 根因:
details.scale是从手势开始累积的缩放值,直接用_scale * details.scale会导致每帧在累积基础上再次乘以累积值,产生指数级增长 - 修复方案:引入
_previousScale记录上一帧的 scale 值,每帧只应用增量delta = details.scale / _previousScale,缩放变为线性跟手 - 举一反三:所有使用
onScaleUpdate+details.scale做缩放的场景,都应使用增量方式而非直接乘法
-
🎨 修复2: 个人中心LV等级标签靠右与编辑按钮上下对齐 (优先级3)
profile_header_row.dart: 将LV等级标签从用户名行中移出,放到右侧与编辑按钮上下对齐- 新增
_buildRightColumn方法,将LV标签和编辑按钮组合为右侧垂直列 _buildUserInfo简化为仅显示用户名和签名,移除LV标签- 布局效果:[头像] [用户名+签名] [LV标签 / 编辑按钮] 右侧上下对齐
[v6.5.51] - 2026-05-27
翻译助手聊天记录重启后丢失修复(1项)
- 🐛 修复: 翻译助手聊天记录重启后丢失 (优先级5)
translate_provider.dart: 修复build()方法中异步加载被空返回值覆盖的Bug- 根因:
_loadHistory()和_loadSessionMessages()虽在build()中被调用,但它们是async方法且内部无await,同步执行后通过state = state.copyWith(...)更新状态,随后build()返回const TranslateState()将已加载的数据覆盖为空 - 修复方案:将加载逻辑改为同步方法
_readHistorySync()和_readSessionMessagesSync(),直接在build()中调用并返回包含已加载数据的初始状态 - 删除旧的
_loadHistory()和_loadSessionMessages()异步方法(逻辑已被同步方法替代) - 举一反三:检查
transfer_notifier.dart和search_provider.dart,它们使用Future.microtask(_init)模式,不存在此问题
[v6.5.50] - 2026-05-27
灵感页面标题修正 + Android TTS引擎初始化修复(2项)
- ✏️ 修改1: 灵感页面标题从'工作流'改回'灵感' (优先级3)
inspiration_page.dart: 页面标题从'工作流'改为'灵感',文件头注释同步更新discover_page.dart: 页面标题从'工作流'改为'灵感',文件头注释同步更新translate_page.dart: previousPageTitle从'工作流'改为'灵感'chat_flow_page.dart: previousPageTitle中'工作流'改为'灵感'(稍后读场景返回页标题)
- 🔊 修改2: 修复Android端系统TTS用不了的问题 (优先级5)
tts_service.dart: Android平台_initPlatformSpecific()原来只打印日志,无实际初始化操作- 添加
await _flutterTts!.awaitSpeakCompletion(true)确保speak()方法正确等待朗读完成 - 添加
getEngines调用作为同步点,等待Android TTS引擎初始化完成后再设置语言/语速等参数 - 添加引擎可用性检查:engines为空时记录警告日志
- 根因:Android上FlutterTts构造函数异步初始化TextToSpeech引擎,原代码未等待引擎就绪就调用setLanguage等设置方法,导致设置静默失败,speak()也无法正常工作
[v6.5.49] - 2026-05-27
情景诗词天气详情布局修复(1项)
- 🐛 天气详情项布局优化 (优先级3)
weather_page.dart: 修复_buildWeatherDetailItem布局溢出问题- emoji 和 label 从垂直排列改为水平排列(Row),value 独占下一行
- 布局效果:💧 湿度 / 72.0(而非 💧 / 湿度 / 72.0 的三行排列)
- emoji 字号从 16 调整为 14,与 label 视觉对齐
- Column 添加
mainAxisSize: MainAxisSize.min防止多余空间 - Row 添加
mainAxisSize: MainAxisSize.min+MainAxisAlignment.center居中且不溢出 - value 的 Text 添加
maxLines: 1和overflow: TextOverflow.ellipsis防止长文本溢出 - 确保 360px 宽度手机上 4 列布局不会溢出
[v6.5.48] - 2026-05-26
数据管理入口优化 + Android系统设置"管理空间"按钮 + 分享接收空安全修复(3项)
- 💾 任务1: 设置页面数据管理入口改造 (优先级3)
more_settings_page.dart: 将"重置与清理"分组的"清空软件数据"按钮改为"闲言数据管理"- 修改按钮图标为文件夹图标(CupertinoIcons.folder_fill),颜色改为橙色(0xFFFF9500)
- 修改标题为"闲言数据管理",副标题为"管理存储空间、缓存和数据"
- 点击行为从弹出工厂重置对话框改为跳转到数据管理页面(AppRoutes.dataManagement)
- 用户可通过数据管理页面进行细粒度的数据管理:分类查看统计、单独清除某类数据、导出导入备份等
- 提升用户体验,避免误操作导致全部数据丢失,同时保留完整的数据管理能力
- 📱 任务2: Android系统设置"管理空间"按钮 (优先级5)
AndroidManifest.xml: 在application标签添加android:manageSpaceActivity=".MainActivity"属性- 此属性使安卓系统设置→应用信息→存储页面中,"清除数据"按钮变为"管理空间"按钮
- 点击"管理空间"直接启动MainActivity(singleTop复用已有实例),通过onNewIntent接收MANAGE_STORAGE意图
- 删除activity-alias方案:activity-alias会创建新Activity实例(不同组件名),导致双Flutter引擎闪退
- 关键修复: 移除
android:taskAffinity="",该属性导致FLAG_ACTIVITY_NEW_TASK无法找到已有任务栈,每次都创建新实例 MainActivity.kt: onNewIntent中setIntent+检测MANAGE_STORAGE,通过MethodChannel通知Flutter导航MainActivity.kt: notifyFlutterOpenDataManagement添加null安全检查,MethodChannel未就绪时标记pending重试- 完整链路:系统设置→管理空间→MainActivity(singleTop复用)→onNewIntent→MethodChannel→Flutter数据管理页面
- 🛡️ 任务3: 分享接收空安全中间件 (优先级5)
- 新增
safe_sharing_receiver.dart: 安全分享接收中间件,不修改本地包receive_sharing_intent SafeSharedMediaFile: 安全解析Map数据,path为null时跳过,type为null时默认file,所有字段null安全SafeSharingReceiver: 包装getInitialMedia/getMediaStream,添加try-catch异常保护sharing_receiver_service.dart: 使用SafeSharingReceiver替代直接调用ReceiveSharingIntent.instance- 修复从系统设置"管理空间"入口启动时SharedMediaFile.fromMap空指针崩溃(_TypeError)
- 新增
[v6.5.47] - 2026-05-26
架构改进:硬编码常量化 + 鸿蒙路由同步 + 缓存统一 + 空壳标记 + 异步保护(5项)
- 🔧 任务1: Provider硬编码常量化 (优先级5)
chat_provider.dart: 新增ChatNotifier.defaultConversationId = 'default'常量,替换硬编码'default'chat_session_provider.dart: 新增17个kSession*常量(readlater/discover/footprint/daily_card等),替换_buildSessions()中所有硬编码会话IDtranslate_provider.dart: 新增TranslateNotifier.defaultSessionId = 'default'常量,替换硬编码'default'- 消除魔法字符串,提高可维护性和可搜索性
- 📱 任务2: 鸿蒙路由同步 (优先级4)
ohos_nav_bridge.dart: 对比 app_routes/content_routes/settings_routes/tool_routes/user_routes/editor_router/feature_routes 共7个路由文件- 修复
/readlater-chat路由缺失sessionType: ChatSessionType.readlater参数 - 新增5条缺失路由:
/quick-card、/editor/preview、/editor/crop、/editor/gallery、/editor/3d-preview - 新增
QuickCardPlaceholder和EditorSubPlaceholder占位组件
- 🗄️ 任务3: 统一缓存管理器入口 (优先级4)
wallpaper_preload_service.dart: 将DefaultCacheManager().downloadFile()替换为CustomCacheManager.instance.downloadFile()- 全项目确认无其他
DefaultCacheManager残留,统一使用CustomCacheManager.instance
- 🔒 任务4: 空壳功能标记 (优先级3)
setting_models.dart:SettingItem新增isPlaceholder字段(默认false)general_settings_sections.dart: 标记nearby_discovery(近场发现)和shader_background(特效背景)为isPlaceholder: truegeneral_settings_page.dart: 新增_buildPlaceholderContent()方法—锁图标🔒+灰色文字+禁用开关+0.6透明度+点击弹窗"该功能正在开发中,敬请期待 🚧"
- 🛡️ 任务5: Fire-and-forget异步调用保护 (优先级5)
- 全项目扫描所有
Future.microtask()和Future.delayed()调用(100+处) - 为所有未保护的 fire-and-forget 调用添加
.catchError()保护 - 涉及文件(40+个):
- Core: crash_monitor, connectivity_provider(2个), connectivity_service, weather_info_provider, notification_provider
- Home: home_provider, offline_provider, cache_provider, character_mood_provider, character_tips_provider, daily_card_style_provider, wallpaper_provider, home_interaction_mixin
- Tool Center: chat_provider, chat_session_provider, chat_attachment_provider, chat_conversation_provider, custom_api_provider, translate_settings_provider, tool_center_provider, inspiration_provider
- Features: daily_card_provider, weather_provider, poetry_provider, countdown_provider, auth_provider, search_provider, progress_provider, source_provider, reading_report_provider, discover_provider, study_plan_provider, reading_goal_provider, pomodoro_provider, hitokoto_service
- Settings: general_settings_provider, general_fields_provider, theme_settings_provider, translate_record_provider, font_management_notifier, transfer_settings_provider, notification_settings_page, permission_management_page
- File Transfer: transfer_notifier, transfer_signaling_handler, transfer_pairing_handler, transfer_file_handler, device_discovery_provider, cloud_cache_provider, canvas_provider, clipboard_provider
- App: app.dart, offline_manager
- UI Pages: onboarding_page, login_page, qrcode_login_page, home_page, favorite_page, chat_flow_page, chat_settings_page, discover_page, poetry_page, screen_share_page, pro_editor_page, log_viewer_page, app_lock_overlay, app_lock_pin_setup, tool_panel, chat_animations, chat_flow_send_toast, appbar_character_sprite, canvas_page, study_plan_page, note_edit_page, share_history_page, plugin_page, tts_plugin_page, translate_plugin_page, hanzi_tool_page
- 全项目扫描所有
[v6.5.46] - 2026-05-26
运势卡片分享 + AirDrop发现 + 权限统计 + 日志导出分析 + 应用锁双认证(5项)
- 🍀 任务1: 每日运势-社交分享运势卡片 (优先级4)
daily_fortune_page.dart: 使用RepaintBoundary+GlobalKey截取运势卡片为PNG图片,通过share_plus分享到社交平台- 添加_onShareFallback()文本分享降级方案,截图失败时回退到纯文本分享
- 分享按钮添加AnimatedScale+AnimatedOpacity动画反馈,防止重复点击
- 📡 任务2: 文件传输-AirDrop风格发现 (优先级3)
- 新增
airdrop_discovery_view.dart: AirDrop风格雷达扫描动画+圆形设备节点布局 _RadarSweepPainter自定义Painter绘制雷达扫描线,_AirDropDeviceNode圆形设备头像file_transfer_discovery_tab.dart: 添加雷达/列表视图切换开关,双视图模式
- 新增
- 📊 任务3: 权限管理-权限使用统计 (优先级4)
permission_service.dart: 新增recordUsage/getUsageStats/getPermissionUsage/getFrequencyLabel等方法- 新增
PermissionUsageStat数据类(count/lastUsed/firstUsed/frequencyLabel/relativeLastUsed) permission_management_page.dart: 添加fl_chart PieChart使用频率饼图,每个权限卡片显示使用统计- 授权时自动记录使用次数和时间,频率标签(低/中/高)颜色编码
- 📝 任务4: 日志查看器-日志导出+分析 (优先级4)
logger.dart: 新增filterByTimeRange/searchByKeyword/filter/countByLevel/exportToCsv方法log_viewer_page.dart: 全面重构—添加分析摘要卡片(错误/警告/信息/调试计数)- 添加关键词搜索栏,导出弹窗支持.log/.csv/.json三种格式
- 使用Log.filter()综合过滤,SharePlus分享导出文件
- 🔐 任务5: 应用锁-指纹+面容双认证 (优先级5)
app_storage.dart: LockStorage新增biometricEnabled存储键和读写方法app_lock_service.dart: AppLockState新增biometricEnabled字段和isDualAuth计算属性- AppLockNotifier新增setBiometricEnabled()方法,setMethod()兼容生物识别模式
app_lock_settings_page.dart: 生物识别从互斥选项改为独立开关,支持密码+生物识别双认证- 动态识别设备生物识别类型(面容/指纹/虹膜),显示对应图标和名称
- 双认证模式状态卡片(绿色边框),显示当前认证组合
app_lock_overlay.dart: 双认证模式优先尝试生物识别,失败后降级到密码/手势- 生物识别图标呼吸动画(AnimationController+scale tween),发光阴影效果
- 降级按钮"使用密码解锁"/"使用生物识别解锁"双向切换
已归档版本
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) / 12.4.0(Tab栏个性交互) / 12.3.0(搜索三大问题修复) / 12.2.0(收藏双向同步) / 12.1.1(快捷按钮导航) / 12.1.0(USB OTG传输) / 6.3.2(登录加载闪烁修复) / 6.3.1(TextPainter异常修复) / 6.2.0(协作画布) / 6.2.1(剪贴板同步) / 11.2.0(云端暂存) / 5.33.0(智能推荐+标签云+智能模式) / 5.32.0(离线浏览缓存) / 5.31.0(通知设置) / 5.30.0(二维码登录) / 5.29.0(表单校验+本地通知) / 5.28.0(文件传输助手+我的设备) / 5.27.0(用户中心接口同步) / 5.26.0(文件传输核心架构) / 5.22.0(聊天多媒体+视觉增强) / 4.21.0(聊天会话流) / 5.11.0(通用设置重构) / 5.10.0(关于页面+图标统一) / 3.9.9(画布样式编辑) / 3.9.8(拖拽描边/文本回写/壁纸无限加载) / 3.9.7(画布圆角+导出修复) / 3.9.6(画布圆角/文字按钮卡死) / 3.9.5(Bug回归修复) / 3.9.4(本地化/HTTP明文) / 3.9.3(画布圆角/壁纸卡死) / 3.9.2(画布圆角/文字按钮/壁纸) / 3.9.1(历史卡死/同步丢失) / 3.9.0(编辑器增强) / 3.8.0 / 2.58.0(六大Bug修复) / 2.57.0(开发计划) / 2.56.0(README更新) / 2.55.1(代码质量清理) / 1.55.0(灵感页面重构) / 1.54.0(个人中心+签到Bug) / 1.53.0(分类列表+骨架屏) / 1.52.0(句子卡片不更新) / 1.51.0(句子循环重复) / 1.50.0(频道同步延迟) / 1.49.0(刷新无响应+分类同步) / 1.48.0(句子广场无限循环) / 1.47.0(API类型转换崩溃) / 1.46.0(句子来源页面) / 1.45.0(笔记自动保存) / 1.44.2(笔记Bug修复) / 1.44.1(笔记删除Bug) / 1.44.0(API集成补全) / 1.40.0(用户安全接口) / 1.39.0(卡片震动/分类切换) / 1.31.0(API功能全面接入) / 1.30.0(传统色页面重构) / 1.23.0(偷工减料修复) / 1.22.0(句子广场交互) / 1.21.0(数据管理卡死/Tab抖动) — 更早版本详见 git history