Files
xianyan/CHANGELOG.md
Developer 27672343b8 520
2026-05-20 01:40:09 +08:00

58 KiB
Raw Blame History

Changelog

所有重要变更均记录于此文件。格式基于 Keep a Changelog


[v14.25.0] - 2026-05-19

新增

  • 协议多语言(中文+英文)全面适配,本地端+网页端同步支持:
    • agreement_data.dart 新增10个英文协议常量privacyPolicyContentEn ~ devTeamContentEn完整翻译所有协议
    • agreement_data.dart 的 getContent/getSubtitle/getUpdateDate 增加 languageId 参数,根据语言返回对应内容
    • agreement_types.dart 枚举新增 titleEn/subtitleEn 字段,新增 titleFor()/subtitleFor()/webUrlFor() 方法
    • agreement_page.dart 改为 ConsumerWidget从 appLocaleProvider 获取当前语言,传递给数据层
    • agreement_list_page.dart 改为 ConsumerWidget标题/副标题/分组名/页脚全部支持中英文
    • 网页端HTML生成脚本改造为双语版每个HTML包含中英文两套内容JS控制显示切换
    • 网页端新增语言切换按钮(右上角毛玻璃胶囊:中文/EN支持URL参数 ?lang=en
    • 网页端 index.html 同步支持双语,英文版链接自动附加 ?lang=en
    • 脚本自动提取中文(xxxContent)和英文(xxxContentEn)两套常量分别生成HTML内容

变更

  • 协议展示页面UI文案"在线版"、"最后更新日期"、"软件协议"等)根据当前语言动态切换
  • 网页端"返回协议列表"按钮根据语言显示中文/英文
  • 英文协议中公司名"微风暴"翻译从"Weibao Storm"更正为拼音"Weifengbao"Mile City Pengpu Town Weifengbao Network Technology Studio

[v14.24.0] - 2026-05-19

新增

  • 协议与隐私政策V6.5综合合规更新P0-P3优先级全部完成
    • 隐私政策新增定义章节(零、定义),明确关键术语含义
    • 新增业务功能与个人信息映射表,逐项说明各功能收集的信息类型及必要性
    • 补充第三方SDK详细信息表Flutter SDK + Supabase Flutter SDK含提供者、收集信息、使用目的、隐私政策链接
    • 新增儿童年龄验证机制14周岁以下禁止注册注册时确认年龄
    • 明确各类信息存储期限账号信息、用户内容、崩溃日志等7类以表格形式展示
    • 完善跨境传输条款(当前不跨境,未来需安全评估+单独同意)
    • 完善个人信息保护负责人信息(邮箱:gg@0gg.cc
    • 各协议统一增加法律适用与争议解决条款(适用中国法律,管辖法院)
    • 统一地址为"云南省昆明市西山区滇池度假区"增加统一社会信用代码92532526MA6PCX153W
    • 免责声明增加消费者权益保留条款
    • 软件介绍/新手指引增加法律声明引用
    • AI功能统一标注为"规划中"
    • 注销流程根据实际代码更新3天审核期+安全验证+状态查询+倒计时)
    • 软件著作权登记号2020SR0421982加入免责声明和开发团队页面
  • 协议HTML网页端同步更新并上传服务器https://tools.wktyl.com/agreements/
    • 软著证书图片展示(免责声明+开发团队页面)
    • 自动化生成脚本从Dart数据提取→Markdown转HTML→上传服务器

修复

  • 修复"继续使用即同意"条款为"主动确认同意"机制
  • 修复英文名称 WordsLeisure → Xianyan
  • 修复账号协议与儿童隐私年龄矛盾14岁以下禁止注册统一标准
  • 修复accountAgreementContent三引号结束符错误'';'''
  • 修复accountAgreementContent章节编号重复两个"八"→"八、联系方式"+"九、法律适用"

[v14.23.0] - 2026-05-19

重构

  • 全平台包名统一为 apps.xy.xianyan,替换原有不统一的 com.example.xianyancom.xianyan
    • Android: build.gradle.ktsnamespace/applicationIdMainActivity.kt 包声明和 import8个 Widget Provider 包声明和 importBleAdvertiserPlugin.kt 包声明和 MethodChannel
    • Android: Kotlin 源码目录从 com/example/xianyancom/xianyan 迁移到 apps/xy/xianyan
    • iOS: Info.plist 的 URL Scheme 和 App Group IDproject.pbxproj 的 PRODUCT_BUNDLE_IDENTIFIERXianyanWidget.swift 的 App Group ID
    • macOS: AppInfo.xcconfig 的 PRODUCT_BUNDLE_IDENTIFIER 和 PRODUCT_COPYRIGHTproject.pbxproj 的 PRODUCT_BUNDLE_IDENTIFIER
    • Linux: CMakeLists.txt 的 APPLICATION_ID.desktop.appdata.xml 文件内容和文件名重命名3个打包脚本
    • Windows: Runner.rc 的 CompanyName 和 LegalCopyright
    • 鸿蒙: app.json5 的 bundleName
    • Flutter/Dart: widget_type.dart 的 qualifiedAndroidNamehome_widget_service.dart 的 App Group IDbluetooth_pairing_service.darthotspot_service.dart 的 MethodChannelabout_page.dart 的华为应用市场链接

[v14.22.0] - 2026-05-19

修复

  • Android requestPinWidget/updateWidget 调用时 androidName 仅传短类名(如DailySentenceProvider)home_widget插件拼接context.packageName后变成com.example.xianyan.DailySentenceProvider,与实际类包名com.xianyan.widget.DailySentenceProvider不一致导致ClassNotFoundException
    • widget_type.dart 新增 qualifiedAndroidName 属性,返回完整类名com.xianyan.widget.XxxProvider
    • home_widget_service.dartupdateWidget() 增加 qualifiedAndroidName 参数
    • widget_provider.dartrequestPinWidget() 增加 qualifiedAndroidName 参数
    • 插件优先使用 qualifiedAndroidName,避免错误的包名拼接
  • 鸿蒙 readlater_form.jsonsupportDimensions 包含非法值"4*1",不在鸿蒙允许列表(1*2/2*2/2*4/4*4/1*1/6*4/2*3/3*3)中,导致构建校验失败
    • 修改为合法值 "2*4"

验证

  • 已检查全部8个鸿蒙 form 配置文件的 supportDimensionsdefaultDimension,无其他非法值

修复

  • HomeWidgetService _notifyUpdate 方法 ohosName 硬编码为 'dailySentence',导致稍后读小组件调用时刷新错误卡片
    • 删除 _notifyUpdate 方法,updateReadlaterCount/updateReadlaterPreview/updateDailySentence 统一使用 updateWidget(WidgetType) 方法
    • 清理不再使用的 _androidWidgetName/_iosWidgetName 常量
  • 鸿蒙所有卡片未处理点击跳转事件
    • 所有8个 FormPage 添加 postCardAction 点击事件,传递对应 action
    • 所有8个 FormAbility 添加 onFormEvent 方法,解析 action 后通过 startAbility 跳转到对应页面
    • 跳转路由与 WidgetType.deepLinkRoute 保持一致
  • AppLocale.system.locale 硬编码返回 Locale('zh', 'CN'),改为返回 WidgetsBinding.instance.platformDispatcher.locale
    • 修复非中文系统用户选择"跟随系统"时始终显示中文的问题
  • Android 所有8个 Widget Provider 缺少 import com.example.xianyan.R,导致 Unresolved reference 'R' 编译错误
    • Provider 在 com.xianyan.widget 包下R 类生成在 com.example.xianyan 包下,需显式导入
  • CheckinProvider.kt 字符串模板 "连续$days天" 语法错误Kotlin 将 days天 视为整体标识符
    • 修复为 "连续${days}天",使用大括号语法明确变量边界

验证

  • CountdownProvider.kt 使用 java.time.LocalDate/ChronoUnit,因 minSdk=26 且已启用 desugaring不存在兼容性问题无需修改

[v14.20.0] - 2026-05-19

重构

  • settings/presentation 目录整理23个文件按功能域分组到4个子目录(每个≤8文件)
    • general/ (5文件): 通用设置页面、选择器、操作、分组、模型
    • theme/ (5文件): 主题设置页面、基础/样式/预览区块、共享组件
    • account/ (4文件): 账户设置、注销、改密、安全问题
    • privacy/ (3文件): 权限管理、隐私政策、日志查看
    • 根目录保留6个独立页面: data/font/language/more/notification/smart_mode
  • 同步更新 app_router.dart 和 ohos_nav_bridge.dart 的 import 路径

[v14.19.0] - 2026-05-19

新增

  • 多语言(i18n)系统P3升级
    • 语言切换动画: _LocaleTransitionWrapper组件切换语言时淡入淡出过渡(300ms easeOut),尊重动画开关设置
    • 4种新语言支持: 印地语(हिन्दी)/葡萄牙语(Português)/俄语(Русский)/法语(Français)共11种语言+跟随系统
    • 语言智能排序: AppLocale.smartSorted(),根据系统语言自动将最相关语言排到前面(匹配语言+国家100分/匹配语言80分/中文50分/英文40分/其他20分)
    • 翻译导入功能: TranslationIOService.importFromJson()协同翻译ActionSheet增加"Import Translation"选项支持粘贴JSON导入翻译
    • 翻译导入UI: CupertinoAlertDialog+CupertinoTextField输入框支持验证/确认/错误提示

修改

  • app_locale.dart: 增加4种语言枚举(hi/pt/ru/fr)+smartSorted()+_relevanceScore()
  • translations.dart: 增加4种语言翻译常量(_hi/_pt/_ru/_fr)+更新getTranslations/resolveSystem/Coverage
  • translation_io_service.dart: 增加importFromJson()+_importNav/_importCommon/_importProfile/_importSettings
  • app.dart: 增加_LocaleTransitionWrapper语言切换动画组件
  • language_settings_page.dart: 使用smartSorted()排序+增加Import Translation选项+导入对话框

[v14.18.0] - 2026-05-19

新增

  • 文件传输Web平台适配 (P3-17)
    • PlatformHelper: 新增supportsFilePicker/supportsImagePicker/supportsLocalNetwork能力检测
    • transfer_chat_file_send.dart: Web平台跳过File().lengthSync()/existsSync()等不支持操作,大文件检测和离线队列适配
    • qr_code_tab.dart: Web平台无摄像头时显示手动输入配对码对话框扫描按钮文案/图标自适应
  • 文件传输HarmonyOS平台适配 (P3-16)
    • DegradationManager: screenCapture始终返回full(已使用RepaintBoundary零权限方案)新增harmonyNearby功能检测
    • device_pairing_page.dart: 其他配对方式新增"📡 鸿蒙Nearby"卡片,非鸿蒙平台显示降级提示
    • transfer_enums.dart: PairingMethod新增harmonyNearby枚举值

修改

  • platform_helper.dart: 新增3个Web能力检测getter
  • degradation_manager.dart: screenCapture简化为始终fullallCapabilities/isFeatureAvailable新增harmonyNearby
  • transfer_chat_page.dart: 新增platform_helper.dart导入(供part文件使用)

[v14.17.0] - 2026-05-19

重构

  • 通用设置页面拆分为多文件结构 (1755行→5个文件每个≤800行)
    • setting_models.dart (88行): 数据模型 SettingSection/SettingItem/SettingType
    • general_settings_sections.dart (386行): 设置分组构建 + 搜索过滤
    • general_settings_pickers.dart (650行): GeneralSettingsPickers mixin8个CupertinoPicker弹窗
    • general_settings_actions.dart (293行): GeneralSettingsActions mixin操作对话框
    • general_settings_page.dart (529行): 主页面mixin组合
  • 主题设置页面拆分为多文件结构 (1906行→5个文件每个≤800行)
    • theme_shared_widgets.dart (105行): 共享组件 ThemeSectionHeader/ThemeOptionChip
    • theme_sections_basic.dart (692行): 预设/外观/定时深色/强调色/字体/毛玻璃/动画
    • theme_sections_style.dart (627行): 圆角/卡片/Tab表情/Tab造型/壁纸/重置
    • theme_sections_preview.dart (507行): 实时预览/动画演示/主题分享
    • theme_settings_page.dart (88行): 主页面

[v14.16.0] - 2026-05-19

新增

  • 多语言(i18n)系统全面升级
    • 阿拉伯语RTL支持: AppLocale增加isRTL/textDirection属性app.dart用Directionality包裹全局
    • 系统语言变化监听: didChangeLocales回调+SystemLocaleVersionNotifier"跟随系统"实时响应
    • T类拆分分组: TNav(3字段)/TCommon(16字段)/TProfile(25字段)/TSettings(100字段),访问方式 t.nav.home / t.common.cancel
    • 向后兼容: T类保留144个@Deprecated getter旧代码 t.navHome 仍可用
    • 参数化翻译: TFunc类(entriesCount/greeting/itemsSelected/pluralItems)7种语言复数处理
    • 翻译fallback: T.withFallback()方法缺失字段自动回退到zh_CN
    • 翻译覆盖率检测: TranslationCoverage工具类语言设置页底部显示各语言覆盖率进度条
    • 协同翻译功能: 导出当前语言/全部语言翻译为JSON到剪贴板CupertinoActionSheet操作面板
    • 日期/数字格式化: localeDateFormatProvider/localeNumberFormatProvider基于intl包
    • localizationDelegates补全: 添加GlobalCupertinoLocalizations.delegate
    • RTL标识: 阿拉伯语语言项显示RTL标签
    • 翻译IO服务: TranslationIOService(exportToJson/exportAllToJson/validateTranslationJson)

修改

  • app_locale.dart: 增加isRTL/textDirection/systemLocaleVersionProvider/appTextDirectionProvider/localeDateFormatProvider/localeNumberFormatProvider
  • translations.dart: T类重构为组合模式(TNav+TCommon+TProfile+TSettings)增加TFunc+TranslationCoverage
  • app.dart: Directionality包裹+didChangeLocales回调+_localizationsDelegates提取为常量+GlobalCupertinoLocalizations
  • language_settings_page.dart: 协同翻译ActionSheet+覆盖率面板+RTL标识+使用t.nav/t.common/t.settings分组访问
  • translation_io_service.dart: 新增翻译导出/导入/验证服务

[v14.15.0] - 2026-05-19

新增

  • 应用内屏幕共享功能 (InApp Screen Share)
    • InAppScreenCaptureService: 使用RepaintBoundary+toImage()截图流,无需系统权限
    • 支持可配置FPS(1-30)和JPEG质量(0.1-1.0)
    • 帧数据通过信令通道screen-share-frame传输base64编码
    • 帧发送节流(80ms最小间隔),防止信令洪泛
    • 接收端实时解码显示支持InteractiveViewer缩放
    • ScreenSharePage新增帧信息栏(帧数/分辨率/大小/InApp标识)

重构

  • ScreenCaptureService: 移除MethodChannel/EventChannel改用InAppScreenCaptureService
    • requestPermission()始终返回true(无需系统权限)
    • 新增setRepaintBoundaryKey/setFps/setQuality/framesStream接口
  • ScreenSharePage: 移除RTCVideoRenderer/RTCVideoView改用Image.memory帧显示
  • ScreenShareState: 新增currentFrame/frameCount字段
  • ScreenShareNotifier: 新增_listenFrameSend/_listenFrameReceive帧收发逻辑
  • SignalingService: 新增screenShareFrame信令类型和sendScreenShareFrame方法
  • transfer_chat_page: 主内容区包裹RepaintBoundary初始化时设置Key
  • transfer_chat_screen_share: 移除PlatformHelper.supportsScreenCapture检查,两个共享选项始终可用

移除

  • ScreenCaptureService中的MethodChannel/EventChannel(不再需要原生屏幕捕获)
  • transfer_chat_pageplatform_helper.dart的import(不再使用)

[v14.14.0] - 2026-05-19

重构

  • 通用设置页面拆分为多文件结构 (1755行→5个文件每个≤800行)
    • setting_models.dart (88行): 数据模型 SettingSection/SettingItem/SettingType从私有类改为公开
    • general_settings_sections.dart (386行): 设置分组构建函数 buildGeneralSettingSections + 搜索过滤 filterSettingSections
    • general_settings_pickers.dart (650行): GeneralSettingsPickers mixin封装8个CupertinoPicker弹窗 + 转场模式描述组件
    • general_settings_actions.dart (293行): GeneralSettingsActions mixin封装缓存清理/重置/导出导入等操作对话框
    • general_settings_page.dart (529行): 主页面,通过 mixin 组合 Pickers + Actions保留UI构建和事件处理

[v14.13.0] - 2026-05-19

重构

  • 多语言翻译系统组合模式重构 (translations.dart)
    • T类拆分为组合模式T内含4个子类字段 nav(TNav), common(TCommon), settings(TSettings), profile(TProfile)
    • TNav(3字段): home/discover/profile
    • TCommon(16字段): cancel/ok/save/confirm/clear/reset/delete/success/failed/enabled/disabled/loading/view/search/entriesCountUnit/copyright
    • TProfile(25字段): title/myFavorites/readingHistory/darkMode/accountSettings等个人中心字段
    • TSettings(100字段): language/generalSettings/interaction/sound等所有设置相关字段
    • 向后兼容T类保留所有144个原有顶级字段作为@Deprecated getter委托到子类现有t.navHome代码不会报错
    • 新增TFunc参数化翻译类entriesCount/greeting/itemsSelected/pluralItems 4个方法支持7种语言的复数/参数化翻译
    • 新增T.withFallback()静态方法将fallback中非空字段覆盖target中为空的字段
    • 新增TranslationCoverage工具类checkAll()返回各语言覆盖率checkCoverage()返回缺失字段列表
    • 新增translationsFuncProviderRiverpod Provider返回TFunc实例
    • 新增_resolveSystemLanguageId()辅助函数
    • 7种语言常量完整保留所有翻译值

修改

  • translations.dart: T类从144个required String参数的平铺结构重构为4子类组合结构(1404行→1726行)

[v14.12.0] - 2026-05-19

新增

  • 协作画布远程光标显示 (P2-12)
    • 远程用户光标以彩色圆形+别名首字母覆盖层显示,不同用户自动分配不同颜色
    • 光标移动使用 AnimatedOpacity 实现平滑动画
    • 光标3秒无移动后自动淡出消失
    • 触摸绘制时自动广播本地光标位置给远程用户
    • 光标广播节流限制(10次/秒),避免信令洪泛
  • 协作画布快照同步 (P2-13)
    • 同步状态栏新增「同步画布」按钮,点击请求对端完整画布快照
    • 同步中显示 CupertinoActivityIndicator 加载指示器
    • 快照请求10秒超时自动取消
    • 收到快照响应后自动合并到本地画布并结束加载状态

修改

  • canvas_sync_service.dart: broadcastCursor 添加100ms节流
  • canvas_provider.dart: CanvasState 新增 cursorOpacities/isSyncing 字段addPoint 自动广播光标,新增 requestSnapshotSync 方法,光标淡出定时器管理
  • canvas_painter.dart: 移除远程光标绘制(改用覆盖层Widget实现动画+淡出)
  • canvas_page.dart: 画布区域改为 Stack 布局叠加光标覆盖层,同步状态栏新增同步按钮和加载指示器,新增 _RemoteCursorWidget/_CursorPointerPainter 组件

[v14.11.0] - 2026-05-19

新增

  • 多语言(i18n)系统:自定义翻译框架,支持实时切换语言无需重启
    • app_locale.dart: AppLocale枚举(8种: system/zh_CN/en/ja/zh_TW/es/ar/bn)含nativeName/englishName/languageCode/countryCode
    • translations.dart: T翻译类(130+字段)7种语言常量translationsProvider响应式翻译
    • appLocaleProvider: Riverpod Provider监听设置变化自动切换Locale
    • supportedLocalesProvider: 提供所有支持Locale列表
    • 系统语言跟随: _resolveSystemLocale()/_resolveSystemTranslations() 自动匹配系统语言fallback到zh_CN
  • 语言选择页面 language_settings_page.dart
    • "跟随系统"选项 + 7种语言列表(简体中文/English/日本語/繁體中文/Español/العربية/বাংলা)
    • 选中语言显示✓标记+accent色标签
    • "协同翻译"按钮入口(占位,后续接入翻译协作平台)
  • 通用设置页面 i18n 适配: 所有硬编码中文替换为 t.xxx 翻译字段
  • 个人中心页面 i18n 适配: 导航/统计/快捷操作/关于弹窗等翻译
  • 底部导航栏 i18n 适配: 闲言/发现/我的 翻译
  • 鸿蒙端导航栏 i18n 适配: 同步翻译
  • 语言偏好持久化: KvStorage general_language 键,默认值 system(跟随系统)
  • 开发文档: docs/i18n_dev_doc.dart — 功能描述/架构设计/数据流/使用示例/验收清单

修改

  • app.dart: MaterialApp/MaterialApp.router 添加 locale + supportedLocales 属性
  • general_fields_provider.dart: 默认语言从 zh_CN 改为 system
  • general_settings_page.dart: 语言选择从CupertinoPicker改为跳转独立语言设置页
  • profile_page.dart: 语言行显示AppLocale.nativeName点击跳转语言设置页
  • app_router.dart: 新增 /settings/language 路由

[v14.10.0] - 2026-05-19

重构

  • 传输聊天页面文件拆分(1916行→3文件每个≤800行)
    • transfer_chat_page.dart (729行): 主页面核心 — 状态变量/生命周期/build/消息列表/网络Ping/速度追踪/已读回执
    • transfer_chat_screen_share.dart (688行): 屏幕共享part文件 — 双向请求/接受/拒绝/SDP/ICE/Offer卡片/网络状态辅助/对端ID收集
    • transfer_chat_file_send.dart (617行): 文件发送part文件 — 附件选择/离线发送/大文件确认/拖拽/语音录制/画布协作/文件分享打开
    • 使用part/part of指令+Extension扩展方法实现跨文件方法共享
    • 主类添加_setState()包装方法,解决扩展方法中setState@protected限制

[v14.9.0] - 2026-05-19

新增

  • Flutter端小部件管理页面优化
    • widget_management_page.dart: 按优先级分组展示(P0核心/P1推荐/P2实用/P3趣味),新增同步主题按钮、深度链接预览
    • widget_type.dart: 新增deepLinkRoute/dataKeyPrefix/themeKey三个getter
    • widget_provider.dart: 新增pushThemeToAllWidgets()方法addWidget支持所有类型+自动推送主题
    • home_widget_service.dart: 新增pushThemeMode/updateFortune/updateCountdown/updatePomodoro/updateSolarTerm/updateCheckin方法扩展深度链接回调
  • iOS WidgetKit P2/P3小部件(5个新Widget)
    • FortuneWidget/CountdownWidget/PomodoroWidget/SolarTermWidget/CheckinWidget
    • 所有8个Widget支持深色主题(WidgetColors结构体+isDark字段)
    • DailyCardWidget新增(Medium/Large尺寸)
  • 鸿蒙 FormExtension P2/P3卡片(5个新FormAbility)
    • FortuneFormAbility/CountdownFormAbility/PomodoroFormAbility/SolarTermFormAbility/CheckinFormAbility
    • 5个ArkUI FormPage均支持深色主题(isDark状态+动态配色)
    • 5个表单配置JSON(fortune_form/countdown_form/pomodoro_form/solar_term_form/checkin_form)
    • module.json5注册5个新extensionAbilities
    • P0/P1 FormAbility和ArkUI页面均添加isDark深色主题支持

修改

  • XianyanWidget.swift: 从2个Widget扩展到8个全部支持深色主题
  • 鸿蒙P0/P1 FormAbility: 添加isDark读取和formData输出
  • 鸿蒙P0/P1 ArkUI Pages: 添加@State isDark + 动态backgroundColor/fontColor

[v14.8.0] - 2026-05-19

新增

  • Android原生小部件P2/P35个新Widget Provider + 深色主题支持)
    • FortuneProvider.kt: 每日运势小部件,展示运势文本+幸运关键词读取fortune_text/fortune_keyword
    • CountdownProvider.kt: 倒计时小部件,展示标题+剩余天数读取countdown_title/countdown_target自动计算天数差
    • PomodoroProvider.kt: 番茄钟小部件,展示倒计时+状态(专注中/已暂停/准备开始)读取pomodoro_remaining/pomodoro_state
    • SolarTermProvider.kt: 节气诗词小部件,展示节气名+诗词读取solar_term_name/solar_term_poem
    • CheckinProvider.kt: 每日签到小部件,展示连续天数+签到状态(/📝)读取checkin_days/checkin_today
  • 全部8个Widget Provider深色主题支持
    • 读取SharedPreferences widget_theme_mode 字段(light/dark)
    • 根据主题自动切换light/dark布局XML
    • 深色背景: widget_background_dark.xml (#1C1C1E iOS风格深色)
  • P2/P3布局XML(10个): widget_fortune/countdown/pomodoro/solar_term/checkin 各light+dark
  • P0/P1深色布局XML(3个): widget_daily_sentence_dark/widget_readlater_dark/widget_daily_card_dark
  • Widget配置XML(5个): fortune_info/countdown_info/pomodoro_info/solar_term_info/checkin_info
  • strings.xml新增5个widget描述字符串
  • AndroidManifest.xml注册5个新receiver

修改

  • DailySentenceProvider.kt: 新增dark主题支持根据widget_theme_mode切换布局
  • ReadlaterProvider.kt: 新增dark主题支持根据widget_theme_mode切换布局
  • DailyCardProvider.kt: 新增dark主题支持根据widget_theme_mode切换布局

[v14.7.0] - 2026-05-19

新增

  • 桌面小部件管理功能:个人中心「会员中心」替换为「桌面小部件」入口
    • widget_management_page.dart: 小部件管理页面支持8种小部件类型展示+平台兼容说明+安装状态
    • widget_type.dart: 8种小部件枚举(dailySentence/readlater/dailyCard/dailyFortune/countdown/pomodoro/solarTerm/checkin)
    • widget_provider.dart: Riverpod Notifier状态管理支持安装检测/添加/固定/数据推送
    • home_widget_service.dart: 新增updateWidget(WidgetType)方法,支持按类型推送数据到指定平台
    • app_router.dart + ohos_nav_bridge.dart: 新增/widget-management路由
  • home_widget插件ohos适配增强
    • home_widget.dart: updateWidget/requestPinWidget新增ohosName参数
    • home_widget_info.dart: 新增ohosFormId/ohosFormName字段
  • Android原生小部件3个P0/P1
    • DailySentenceProvider.kt + ReadlaterProvider.kt + DailyCardProvider.kt: WidgetProvider
    • 布局XML: widget_daily_sentence/widget_readlater/widget_daily_card
    • Widget配置XML: daily_sentence_info/readlater_info/daily_card_info
    • AndroidManifest.xml注册3个receiver
  • iOS原生小部件
    • XianyanWidget.swift: WidgetKit入口DailySentenceWidget+ReadlaterWidget
    • Info.plist + Assets.xcassets: Widget Extension配置
  • 鸿蒙原生卡片3个P0/P1
    • DailySentenceFormAbility.ets + ReadlaterFormAbility.ets + DailyCardFormAbility.ets
    • ArkUI页面: DailySentenceFormPage/ReadlaterFormPage/DailyCardFormPage
    • 表单配置JSON: daily_sentence_form/readlater_form/daily_card_form
    • module.json5注册3个extensionAbilities

修改

  • profile_page.dart: 会员中心→桌面小部件图标改为CupertinoIcons.square_grid_2x2

[v14.6.0] - 2026-05-19

新增

  • P3-06 拖拽发送文件聊天页面支持DragTarget拖拽文件发送
    • transfer_chat_page.dart: DragTarget包裹聊天区域拖入文件时显示DottedBorder+图标+文字提示
    • _isDragOver状态变量 + AnimatedOpacity平滑过渡
    • _handleDroppedFiles()验证路径后调用_sendFilesWithOfflineCheck()
    • 拖拽提示: 半透明遮罩 + DottedBorder(accent色) + CupertinoIcons.arrow_down_doc + "释放以发送文件"
  • P3-08 消息长按上下文菜单CupertinoContextMenu长按消息气泡弹出操作菜单
    • transfer_chat_bubbles.dart: ChatMessageBubble新增onCopy/onForward/onDelete/onShare/onOpen回调
    • 文本消息: 复制/转发/删除 | 文件消息: 打开/分享/删除 | 语音消息: 删除 | 系统消息: 无菜单
    • transfer_chat_page.dart: 连接回调 — 复制到剪贴板/删除消息/分享文件/打开文件/转发提示
    • transfer_notifier.dart: 新增deleteMessage()方法从state和数据库删除消息
    • transfer_database.dart: 新增deleteMessage()方法Drift ORM删除记录

[v14.5.0] - 2026-05-19

新增

  • 功能降级管理器 DegradationManager:跨平台功能降级策略,优雅回退不可用功能
    • degradation_manager.dart: 功能能力检测+降级提示+替代方案
    • FeatureLevel枚举: full/limited/minimal/unavailable 四级能力等级
    • FeatureCapability模型: name/level/fallbackHint/alternativeMethod
    • 6项功能检测: screenCapture/nfcPairing/bluetoothPairing/wifiDirect/usbTransfer/remoteInput
    • isFeatureAvailable()统一查询接口
    • allCapabilities/unavailableFeatures批量查询

修改

  • device_pairing_page.dart: 其他配对方式Tab集成DegradationManager
    • 蓝牙/NFC/USB配对方式双重检测: discoveryState + DegradationManager平台能力
    • 不可用功能展示fallbackHint降级提示文字
    • 不可用功能展示💡alternativeMethod替代方案建议
    • _buildOtherMethodCard新增fallbackHint/alternativeMethod参数
  • transport_router.dart: 传输路由集成DegradationManager平台能力过滤
    • selectRoute(): USB/Wi-Fi Direct候选添加DegradationManager前置检查
    • getAvailableTransports(): USB/Wi-Fi Direct传输添加DegradationManager前置检查
    • sendWithFallback(): attemptOrder过滤不可用传输方式
    • 新增_isTransportAvailable()辅助方法

[v14.4.0] - 2026-05-19

新增

  • iOS WidgetKit 小组件扩展:ios/XianyanWidget/ 目录
    • XianyanWidget.swift: Widget Extension 入口,包含两个小组件
      • DailySentenceWidget每日一句从 App Group UserDefaults 读取 daily_sentence / daily_sentence_author
      • ReadlaterWidget稍后读从 App Group UserDefaults 读取 readlater_count / readlater_preview_text / readlater_preview_author
    • 两种小组件均支持 systemSmall / systemMedium 尺寸
    • 使用 containerBackground(for: .widget) 适配 iOS 17+ 样式
    • App Group ID: group.com.xianyan.share
    • Info.plist: WidgetKit Extension 配置NSExtensionPointIdentifier 为 com.apple.widgetkit-extension
    • Assets.xcassets: 包含 AccentColor.colorset 和 AppIcon.appiconset

[v14.4.0] - 2026-05-19

新增

  • Android 桌面小部件完整实现3个Widget Provider + 布局XML + 配置注册
    • DailySentenceProvider: 每日精选句子小部件,展示句子+作者点击打开APP
    • ReadlaterProvider: 稍后读小部件,展示未读数量+预览文本点击打开APP
    • DailyCardProvider: 精美日签卡片小部件,居中展示日期+句子+作者点击打开APP
  • Widget布局XML:
    • widget_daily_sentence.xml: 纵向布局句子TextView + 作者TextView(右对齐)
    • widget_readlater.xml: 纵向布局,未读数量(粗体) + 预览文本(2行截断)
    • widget_daily_card.xml: FrameLayout+LinearLayout居中日期+句子(居中4行)+作者(右对齐)
  • Widget配置XML:
    • daily_sentence_info.xml: 3x2单元格30分钟更新可水平/垂直调整
    • readlater_info.xml: 3x1单元格30分钟更新可水平/垂直调整
    • daily_card_info.xml: 3x3单元格30分钟更新可水平/垂直调整
  • widget_background.xml: 白色圆角16dp背景drawable
  • strings.xml: 新增3个widget描述字符串资源
  • AndroidManifest.xml: 注册3个receiver(DailySentenceProvider/ReadlaterProvider/DailyCardProvider)

修改

  • AndroidManifest.xml: 在<application>标签内</activity>后新增3个<receiver>声明

[v14.3.0] - 2026-05-19

新增

  • 设备卡片3D倾斜效果DeviceCard集成flutter_tilt Tilt.base交互
    • device_card.dart: GestureDetector内包裹Tilt.baseangle=6moveDuration=200ms
    • 光照效果: LightConfig(maxIntensity: 0.3),跟随倾斜方向动态光照
    • 圆角裁剪: borderRadius与卡片AppRadius.lgBorder统一
  • PlatformHelper平台检测工具类跨平台功能能力检测
    • platform_helper.dart: 复用platform_utils条件导入新增能力检测
    • supportsScreenCapture / supportsNFC / supportsBluetooth / supportsWiFiDirect / supportsUSB
    • screenCaptureMethod: 各平台屏幕捕获API名称(MediaProjection/ReplayKit/CGWindowListCreateImage等)
    • platformName: 统一平台名称获取

修改

  • device_card.dart: Tilt.base包裹Container保留GestureDetector外层+animate动画
  • transfer_chat_page.dart: _showScreenShareOptions()集成PlatformHelper
    • 不支持屏幕捕获时Toast提示"当前平台不支持屏幕捕获"并return
    • "共享我的屏幕"选项仅supportsScreenCapture为true时显示
    • "观看对方屏幕"选项始终显示(接收视频全平台可用)

[v14.2.0] - 2026-05-19

新增

  • Liquid Glass 风格统一:文件传输页面 Container+BoxDecoration 全部替换为 GlassContainer
    • device_pairing_page.dart: 其他配对方式卡片 → GlassContainer(depth: elevated)
    • pairing_code_tab.dart: 配对码展示卡片 → GlassContainer(depth: prominent)
    • qr_code_tab.dart: 二维码展示卡片 → GlassContainer(depth: prominent)
    • radar_scan_tab.dart: 设备列表项 → GlassContainer(depth: base)
  • 配对成功庆祝动画三个配对Tab(pairing_code/qr_code/radar_scan)配对成功时
    • CelebrationOverlay 全屏撒花效果包裹成功弹窗
    • HapticService.success() 触觉反馈
  • 触觉反馈集成:文件传输全流程关键交互点
    • 发送消息: HapticService.light()
    • 接收消息: HapticService.light() (ref.listen监听新消息)
    • 文件传输完成: HapticService.success()
    • 文件传输失败: HapticService.error()
    • 屏幕共享请求接受: HapticService.success()
    • Tab切换: HapticService.light()
  • HapticService 新增 error() 方法用于传输失败等错误场景

修改

  • device_pairing_page.dart: GlassContainer + TabController切换触觉
  • pairing_code_tab.dart: GlassContainer + CelebrationOverlay + HapticService
  • qr_code_tab.dart: GlassContainer + CelebrationOverlay + HapticService
  • radar_scan_tab.dart: GlassContainer + CelebrationOverlay + HapticService
  • transfer_chat_page.dart: ref.listen监听消息变化触发触觉反馈 + 发送/屏幕共享触觉
  • haptic_service.dart: 新增 error() 静态方法

[v14.1.0] - 2026-05-19

新增

  • Lottie空状态扩展EmptyType新增3个文件传输场景类型
    • noDevices — "未发现附近设备" / "请确保对方设备已开启闲言APP"含Lottie动画
    • noTransfers — "暂无传输记录" / "发送或接收文件后将在此显示"含Lottie动画
    • transferError — "传输出错" / "请检查网络连接后重试"含Lottie动画
  • 雷达扫描空状态统一:radar_scan_tab.dart 自定义空状态替换为 EmptyState(type: EmptyType.noDevices)
  • 传输记录空状态统一:file_transfer_records_tab.dart 自定义空状态替换为 EmptyState(type: EmptyType.noTransfers)
  • 实时传输速度图表:TransferSpeedChart 组件
    • 紧凑型fl_chart折线图高度60嵌入聊天页输入栏上方
    • 显示最近30秒速度历史accent色线条+渐变填充
    • 无坐标轴标签(紧凑模式),平滑曲线
    • 左侧显示当前速度文字
    • 传输中自动显示,传输结束自动隐藏
  • 消息已读回执VisibilityDetector检测远程消息可见性
    • 远程消息可见>80%持续1秒后自动触发 markMessageAsRead
    • _ReadReceiptDetector 组件封装VisibilityDetector+1秒延迟+防重复触发
    • ChatMessageBubble 新增 onVisible 回调
    • 仅对未读远程消息生效,系统消息不触发

修改

  • empty_state.dart: EmptyType枚举新增noDevices/noTransfers/transferError
  • radar_scan_tab.dart: _buildEmptyState() 使用EmptyState组件
  • file_transfer_records_tab.dart: 空状态使用EmptyState组件
  • transfer_chat_bubbles.dart: ChatMessageBubble新增onVisible回调参数
  • transfer_chat_page.dart: 集成TransferSpeedChart+VisibilityDetector已读回执+_speedHistory状态追踪

[v14.0.0] - 2026-05-19

新增

  • 设备配对页面全面重构4Tab从IP/扫码/蓝牙/其他 → 配对码/扫码/雷达/其他接入SignalingService真实流程
    • 配对码Tab (pairing_code_tab.dart): 生成6位配对码+5分钟倒计时+复制功能 / 6位输入框自动聚焦+自动提交 / pairing-matched成功弹窗
    • 扫码Tab (qr_code_tab.dart): QrImageView生成xianyan://pair二维码 / MobileScanner相机扫描+四角装饰框 / 扫描结果解析+配对请求
    • 雷达Tab (radar_scan_tab.dart): flutter_animate脉冲雷达动画 / radarBroadcast+radarScan双信令 / 设备按matchType分组(我的设备/同一网络/同一城市/远程) / 10秒空态提示
    • 其他Tab: 手动IP移入CupertinoAlertDialog弹窗 / 保留蓝牙/NFC/USB/热点/账户配对
  • 每个Tab独立文件主页面device_pairing_page.dart从617行精简至~390行

修改

  • device_pairing_page.dart: Tab结构重构(配对码/扫码/雷达/其他)IP配对移至其他Tab弹窗蓝牙Tab合并至其他Tab
  • 新增3个Tab组件文件: pairing_code_tab.dart / qr_code_tab.dart / radar_scan_tab.dart

[v13.9.0] - 2026-05-19

新增

  • 画布邀请卡片功能:当一方打开协作画布时,对方聊天页面自动显示"🎨 对方邀请你加入协作画布"卡片,含"加入画布"按钮
    • TransferMessageType.canvasInvite 新消息类型content 存储canvasId
    • ChatCanvasInviteContent 气泡组件,展示邀请信息+加入按钮
    • ChatTransferCallbacks.onCanvasJoin 回调,点击"加入画布"导航到CanvasPage
    • TransferNotifier.addCanvasInviteMessage() 方法,去重逻辑防止重复邀请

修复

  • _openCanvas() 缺少信令连接检查:新增 signaling.isConnected 判断,未连接时显示 Toast "信令未连接,无法使用协作画布"并阻止导航
  • 聊天页面未监听画布加入信令:_signalingMessageSub 新增 canvasJoin 消息处理收到对端canvasJoin后自动添加邀请卡片

修改

  • transfer_message.dart: 新增 canvasInvite 枚举值 + isCanvasInvite getter
  • transfer_chat_bubbles.dart: ChatTransferCallbacks 新增 onCanvasJoin 回调 + ChatCanvasInviteContent 组件
  • transfer_chat_page.dart: _openCanvas() 增加信令检查 + _handleCanvasJoin()/_joinCanvas() 方法 + callbacks传递onCanvasJoin

[v13.8.0] - 2026-05-19

修复

  • 文件传输错误消息未传播到聊天气泡:updateFileMessageProgress() 增加 errorMessage 可选参数,传输失败时错误详情同步更新到消息模型,ChatFileContent 可正确显示具体错误原因而非通用"传输失败"
  • 传输异常时消息状态卡在"传输中"executeSendTask()_executeUsbSendTask() 的 catch 块新增 updateFileMessageProgress() 调用,确保消息状态同步更新为 failed
  • WsRelay 文件接收失败未更新消息状态:handleWsRelayFileError() 新增 updateFileMessageProgress() 调用,将消息状态更新为 failed 并传递错误原因
  • 离线对端有IP时未正确处理_sendFilesWithOfflineCheck() 增加信令连接性判断(signaling.isConnected && _isSignalingOnline),当对端离线但可通过信令中转时仍尝试直接传输

新增

  • 离线发送对话框增加"加入离线队列"选项:_showCloudCacheDialog()_showOfflineSendDialog(),提供三个选项:取消/加入离线队列/暂存至云端

修改

  • transfer_file_handler.dart: updateFileMessageProgress() 签名增加 {String? errorMessage} 参数
  • transfer_signaling_handler.dart: updateFileMessageProgress 类型签名同步更新,handleWsRelayFileError() 增加消息状态更新
  • transfer_chat_page.dart: _sendFilesWithOfflineCheck() 离线判断逻辑优化,_showCloudCacheDialog()_showOfflineSendDialog()

[v13.7.0] - 2026-05-19

新增

  • 翻译助手网络层重构:package:http → 项目现有 Dio 封装
    • 新增 TranslateDioClient 工具类独立Dio实例不走ApiClient的baseUrl和Token拦截器
    • 5个翻译服务全部改用DioGoogle/Bing/LibreTranslate/MyMemory/AppWorlds
  • 用户自定义翻译API功能
    • 新增 CustomTranslateApi 模型支持GET/POST、自定义参数名、响应路径、额外Header等
    • 新增 CustomTranslateService 服务:动态调用用户配置的翻译接口
    • 新增 CustomApiNotifier 状态管理:增删改查+持久化到SharedPreferences
    • 设置页面新增「自定义接口」区域:添加/编辑/禁用/删除自定义API
  • API测试结果增强ApiTestResult 模型(成功/响应时间/错误信息)
  • 设置页面展示响应速度每个API显示测试状态(✓/✗)+响应时间(ms/s)
  • AppWorlds频率限制处理内置2秒1次请求间隔控制
  • flutter_tts 依赖:为翻译结果朗读功能做准备

修改

  • translate_provider.dart: _apis_builtInApis + 动态合并自定义APItestAllApis() 返回 ApiTestResult(含响应时间)
  • translate_settings_page.dart: 重写设置页面,增加响应速度展示+自定义API管理+API测试结果增强
  • appworlds_translate_service.dart: 内置 _waitForRateLimit() 频率限制
  • 降级顺序内置API优先(bing→mymemory→appworlds→google→libre)自定义API追加到末尾

[v13.6.1] - 2026-05-19

修改

  • 传输聊天气泡组件文件拆分:transfer_chat_bubbles.dart(1434行) → 3个文件
    • transfer_chat_bubbles.dart(~410行): 主文件,保留 ChatMessageBubble/ChatTextContent/ChatProgressContent/ChatPairingBubble/ChatSystemMessage/DeliveryStatusIndicator/ChatVoiceContent/chatDeviceAlias
    • transfer_chat_file_content.dart(~270行): 文件传输气泡组件(ChatFileContent/ChatStatusIcon/ChatTransferControls/ChatControlButton)
    • transfer_chat_media_content.dart(~530行): 媒体气泡组件(ChatImageContent/ChatVideoContent/_ImagePreviewPage/_VideoPlayerPage/_ZoomButton)
  • _chatDeviceAlias 重命名为 chatDeviceAlias(跨文件使用需公开)
  • 备份文件: transfer_chat_bubbles.dart.bak(保留)

[v13.6.0] - 2026-05-19

新增

  • 软件协议模块(features/agreements/10项协议/政策完整内容与展示页面
    • 数据层: AgreementType 公开枚举10种协议类型+ AgreementData 公开数据类(全局可调用)
    • 展示层: AgreementPage 通用协议展示页(支持动态主题+重要字段高亮【】/粗体**+ AgreementListPage 协议列表页
    • 路由: /agreements(协议列表)+ /agreement/:type(协议详情)
  • 10项协议内容符合PIPL/GDPR/CCPA/COPPA等法规:
    • 隐私政策含自动化决策、安全事件处置、DPIA评估、国际数据保护章节
    • 用户服务协议(含不可抗力条款)
    • 账号使用协议地区差异化年龄门槛中国14岁/欧盟16岁/美国13岁
    • 会员权益说明(规划阶段,暂无内购)
    • 免责声明及内容版权归属
    • 儿童隐私政策含COPPA特别规定
    • 软件权限使用说明
    • 软件介绍
    • 新手指引
    • 开发团队

修改

  • 关于页面:法律信息区「隐私政策」→「软件协议」,跳转协议列表页
  • 登录页面:协议弹窗占位文本 → 跳转实际协议详情页(用户协议/隐私政策)
  • 路由配置:新增 /agreements/agreement/:type 路由

新增

  • 翻译助手完整功能实现(会话流入口 + 翻译页面 + 设置页面 + 5个翻译API
    • 数据模型: TranslateMessage, TranslateSession, TranslateLanguage (29种语言)
    • API抽象层: TranslateApiService + 5个实现 (Google/Bing/LibreTranslate/MyMemory/AppWorlds)
    • 状态管理: TranslateProvider (翻译+降级+重试+未读红点) + TranslateSettingsProvider (持久化设置)
    • 翻译页面: 语言对选择+快捷语言Chip+会话流消息列表+输入发送+空态+快捷翻译
    • 设置页面: API选择+翻译开关+数据管理+接口测试+响应速度展示
    • 会话流集成: chat_session_provider新增translate系统会话(不置顶,NEW标签)
    • 路由注册: /translate + /translate-settings (GoRouter + OhosNavBridge)
    • 未读红点: 翻译失败时显示红点,点击进入后清除
    • API降级: 按优先级自动切换,所有API失败时显示错误+重试按钮

修改

  • inspiration_page: _onSessionTap中增加translate会话的clearUnread调用
  • app_router: 新增translate/translateSettings路由常量和GoRoute注册
  • ohos_nav_bridge: 新增translate/translateSettings路由映射

[v13.4.0] - 2026-05-19

新增

  • 传输聊天页双向屏幕共享:点击「屏幕」按钮弹出选择面板,支持「观看对方屏幕」(view)和「共享我的屏幕」(share)两种方向
  • 使用 SignalingService.requestScreenShare/acceptScreenShare/rejectScreenShare 替代旧 screenShareOffer 信令
  • 监听 signalingService.onScreenShareRequest 处理收到的屏幕共享请求,根据 direction 显示不同弹窗文案
  • 监听 signalingService.onMessage 处理 screenShareAccept/screenShareReject 响应

修改

  • transfer_chat_page: _startScreenShare → _showScreenShareOptions (CupertinoActionSheet选择面板)
  • transfer_chat_page: 新增 _requestScreenShare/_listenScreenShareEvents/_handleIncomingScreenShareRequest/_acceptIncomingScreenShare/_handleScreenShareAccept/_handleScreenShareReject 方法
  • transfer_chat_page: 导航栏按钮文案「共享」→「屏幕」onTap 指向新选择面板

[v13.3.0] - 2026-05-19

新增

  • 翻译助手功能规划发现页新增翻译助手入口会话流式翻译UI5个免费翻译API

修改

  • 全局统一命名:「灵感」→「发现」,所有用户可见文本、注释、描述统一更新
    • chat_flow_page: previousPageTitle '灵感'→'发现'
    • hidden_sessions_page: previousPageTitle '灵感'→'发现'
    • general_settings_provider: 启动页选项 '灵感'→'发现',图标 💡🧭
    • chat_message: ChatMessageType.sentence label '灵感句子'→'发现句子'
    • chat_sentence_card_bubble: '灵感句子'→'发现句子'
    • discover_page: '暂无灵感'→'暂无发现',注释更新
    • tool_item: '随机灵感'→'随机发现''传统色彩灵感'→'传统色彩发现'
    • tool_panel: '发现更多灵感好帮手'→'发现更多好帮手'
    • page_registry: name/description 更新
    • 其他注释/描述中的'灵感'统一替换为'发现'

[v13.2.0] - 2026-05-19

新增

  • 信令服务器: 配对码机制(pairing-code-create/join/matched)6位码5分钟有效
  • 信令服务器: 雷达扫描机制(radar-broadcast/scan/devices)按IP段/城市匹配
  • 信令服务器: 屏幕共享信令(screen-share-request/accept/reject/stop),支持双向
  • 信令服务器: /health端点返回配对码/雷达池/屏幕共享统计
  • 测试脚本: test_cross_network_pairing.py (10个场景)
  • 测试脚本: test_screen_share_signaling.py (6个场景)
  • 测试脚本: test_canvas_sync.py (5个场景)
  • 测试脚本: test_full_e2e.py (7步全流程)

修改

  • upload_signaling.py: 修复备份文件已存在时重命名失败问题
  • API_FILE_TRANSFER_CORE_DOC.md: 新增3.11-3.13协议文档

验证

  • 配对码创建/加入/匹配: 5/5场景通过
  • 雷达广播/扫描: 5/5场景通过
  • 屏幕共享信令: 6/6场景通过
  • 画布同步: 5/5场景通过
  • 全流程E2E: 7/7步骤通过

[6.5.1] - 2026-05-19

新增诗词设置页面与天气诗词设置页面

为今日诗词和天气诗词功能分别创建独立设置页面, 支持推送开关/时间、显示选项、气泡样式、字体大小等偏好配置。

变更内容

文件 修改
poetry_settings_page.dart 新增今日诗词设置页面8项设置项推送开关/时间/推荐数量/译文/标签/推荐理由/气泡样式/字体大小)
weather_settings_page.dart 新增天气诗词设置页面8项设置项推送开关/时间/详细天气/心情标签/诗词数量/气泡样式/字体大小/城市设置)

新增功能

  • 诗词设置StateProvider 管理设置状态CupertinoSwitch/CupertinoSlidingSegmentedControl/CupertinoTimerPicker 控件
  • 天气设置:同上 + CupertinoTextField 城市输入
  • 两个页面均使用 GlassContainer 分组、AppThemeExtension 动态主题、AppTypography/AppSpacing/AppRadius 统一设计系统
  • iOS 风格 CupertinoPageScaffold + CupertinoNavigationBar

[6.5.0] - 2026-05-19

天气诗词页面重构为聊天样式

将天气诗词页面从传统卡片列表布局重构为聊天对话样式, 增强交互体验,支持快捷回复、底部输入栏、设置入口等功能。

变更内容

文件 修改
weather_page.dart 完全重写为聊天样式,新增 _ChatMessage 数据模型7种消息类型system/weather/mood/poetry/poemList/detail/user

新增功能

  • 聊天气泡布局:左侧🌤️头像 + 右侧气泡,用户消息右侧显示
  • 天气卡片气泡:渐变背景 + 天气icon + 温度 + 城市天气 + 4列详细数据
  • 心情标签气泡emoji + 天气心情标签
  • 诗词推荐气泡:居中诗词内容 + 作者标题 + 收藏/分享按钮
  • 诗词列表气泡:📖标题 + 多首诗词卡片 + keyword标签
  • 详细数据气泡2x2 GridView 展示湿度/风向/风力/AQI
  • 快捷回复:天气卡片下方"换首诗"、"明天天气"、"分享"
  • 底部输入栏CupertinoTextField + 发送按钮
  • AppBar新增设置按钮跳转 /weather/settings
  • 全局 flutter_animate 入场动画fadeIn + slideY
  • 骨架屏适配聊天布局

[6.4.9] - 2026-05-18

🐛 修复"我的"页面数据延迟问题 — 积分/签到/笔记数据不一致

用户在签到、发布笔记后返回"我的"页面,积分、签到天数、笔记数量显示与实际不一致。 根因:数据变更后未同步刷新 authProvider 中的用户信息。

修复内容

文件 修改
profile_page.dart 页面进入时调用 refreshUser() 刷新用户数据
signin_provider.dart 签到成功后调用 refreshUser() 更新积分和签到天数
article_provider.dart 发布文章成功后调用 refreshUser() 更新文章数量

举一反三

数据同步原则:

  1. 页面进入时刷新:用户中心、个人资料等页面进入时应主动刷新用户数据
  2. 操作后同步更新:签到、发布、删除等操作成功后应刷新相关用户数据
  3. Provider 联动:跨 Provider 数据依赖时,操作完成后应主动触发数据同步

[6.4.8] - 2026-05-18

🐛 修复全局 Loading 卡死 — Notifier 初始状态 isLoading: true 导致 UI 永远 loading

上一次修复v6.4.6)将 Notifier 构造函数中的初始化移至 build() + Future.microtask()PoetryStateProgressStateCountdownStateisLoading 默认值为 trueFuture.microtask() 延迟了 _init() 的执行,导致 UI 在初始渲染时看到 isLoading: true 但数据尚未加载,永远显示 loading 骨架屏。

修复策略

类型 修复方式 示例
同步数据 直接在 build() 中计算并返回完整初始状态 InspirationNotifier
异步数据 + isLoading 默认 true Future.microtask() + 初始状态设 isLoading: false PoetryNotifier, ProgressNotifier, CountdownNotifier
异步数据 + isLoading 默认 false Future.microtask() + 默认初始状态 DiscoverNotifier, DailyCardStyleNotifier, TransferSettingsNotifier

举一反三

Riverpod Notifier 的 build() 方法设计原则:

  1. build() 必须返回立即可用的初始状态,不应依赖异步操作设置关键 UI 状态
  2. 如果 State 的 isLoading 默认为 truebuild() 必须返回 isLoading: false,否则 UI 会卡 loading
  3. 同步数据应直接在 build() 中计算,避免不必要的异步延迟
  4. 异步数据加载用 Future.microtask(),但不影响初始 UI 渲染

[6.4.6] - 2026-05-18

🐛 全局修复 Riverpod Notifier 反模式 — 构造函数使用 state/ref + CanvasProvider 构建期间修改状态

两类 Riverpod 反模式全局修复: ① 多个 Notifier 在构造函数中调用 state/ref,但 Riverpod Notifier 在构造函数执行时 ref/state 尚未初始化 ② CanvasNotifier 在 widget 生命周期build/dispose中直接修改 state,导致 FlutterError

修复方案

  • 构造函数中的初始化逻辑移至 build() 方法,同步初始化直接执行,异步用 Future.microtask()
  • CanvasProvider 4 处 state = 修改包裹在 Future.microtask() 中 + _disposed 标志防护
  • 本次修复 9 个 Notifier + CanvasNotifier加上之前修复的 8 个,已覆盖项目中所有此类反模式

修复文件清单

Notifier 修复内容
GeneralSettingsNotifier 构造函数 _initServices()build() 中直接调用
SolarTermNotifier 构造函数 _loadData()build() 中直接构建初始状态
TransferSettingsNotifier 构造函数 _loadFromPrefs()build()Future.microtask()
ProgressNotifier 构造函数 _init()build()Future.microtask()
PoetryNotifier 构造函数 loadPoetry()build()Future.microtask()
InspirationNotifier 构造函数 _loadSentences()build()Future.microtask()
ChatConversationNotifier 构造函数 _init()build()Future.microtask()
DailyCardStyleNotifier 构造函数 _loadFromStorage()build()Future.microtask()
DiscoverNotifier 构造函数 _init()build()Future.microtask()
CountdownNotifier 构造函数 _loadEvents()build()Future.microtask()
CanvasNotifier Future.microtask() 防护 + _disposed 标志

[6.4.0] - 2026-05-18

🧭 鸿蒙端全量导航修复 — 补全33条缺失路由 + 全项目96处导航调用迁移

v6.1.0 虽已创建 OhosNavBridge 和 appPush 扩展,但仅替换了 3 个文件的导航调用, 且路由映射仅覆盖 58 条路由(缺失 33 条),导致鸿蒙端大量页面无法跳转。 本次修复:①补全 OhosNavBridge 全部 89 条路由映射 ②全项目 96 处导航调用迁移为 appPush/appGo ③扩展 appPush 支持 extra 参数

核心修复

修改 文件 说明
补全路由映射 ohos_nav_bridge.dart 新增 33 条路由 + 带参数路由处理 + 占位页面
extra 参数支持 app_nav_extension.dart appPush/appReplace 新增 {Object? extra} 命名参数
全量导航迁移 28 个文件 context.push → context.appPush、context.go → context.appGo

[6.3.0] - 2026-05-18

🔮 恢复鸿蒙端液态玻璃效果 — 仅阉割路由,保留全部视觉特效

v6.0.0 为修复鸿蒙端白屏问题,过度阉割了液态玻璃效果,实际白屏根因是 MaterialApp.router + 额外包导入,与液态玻璃无关。 本次修复恢复鸿蒙端全部液态玻璃视觉效果LiquidGlassWidgets/GlassTheme/GlassBottomBar/TabIconSprite/Catcher2仅保留路由(GoRouter)阉割。


[6.1.0] - 2026-05-14

🔌 新功能 — USB OTG 有线传输

USB OTG Host 模式文件传输,两台 Android 设备通过 USB 线缆高速传输文件。

  • UsbTransportService: MethodChannel 桥接原生 USB 操作,块传输发送/接收+进度回调USB 2.0/3.0/3.1 自适应块大小
  • UsbDiscoveryService: EventChannel 监听 USB 插入/拔出事件,自动扫描已连接设备
  • UsbConfirmDialog: iOS 风格确认对话框,显示设备名称/协议版本/最大速度/认证状态
  • TransferFileHandler/TransferNotifier USB 集成: USB 传输全链路打通

[5.15.0] - 2026-05-16

🔌 鸿蒙适配 — 30 个三方包全量适配完成

三批次完成 30 个三方包鸿蒙适配:第一批 11 个TPC 官方合并)、第二批 9 个TPC 包合并+自行适配)、第三批 10 个7 个自行编写 ohos 原生代码 + 2 个 TPC 合并 + 1 个 fluttertoast

适配模式

  • 联合插件模式: ohos 原生代码在独立 *_ohos 子包,主包声明 default_package
  • 直接插件模式: ohos 原生代码在主包 ohos/ 目录pubspec 声明 pluginClass

已适配 30 包清单

shared_preferences / path_provider / url_launcher / image_picker / local_auth / video_player / permission_handler / flutter_secure_storage / share_plus / battery_plus / connectivity_plus / flutter_local_notifications / file_picker / receive_sharing_intent / wakelock_plus / mobile_scanner / wifi_iot / audioplayers / record / sqflite / fluttertoast / video_compress / flutter_blue_plus / gal / network_info_plus / app_links / pro_image_editor / home_widget / nfc_manager / nearby_service


[5.9.0] - 2026-05-15

🐛 Bug修复 — 6项关键问题

  1. 系统分享白屏Navigator.pushNamedGoRouter.of(ctx).go
  2. 画布 ref disposed 报错 — 缓存 Notifier 引用到 _cachedNotifier
  3. 画布画线无法同步 — 新增 SnapshotRequestCallback,响应 snapshot 请求
  4. 屏幕共享不可用 — 改用 screenShareProvider.startSharing() 正确发起共享
  5. 稍后读消息未显示 — 新增 notifyReadlaterRefresh() 全局事件总线
  6. 输入法自动弹出 — 新增 KeyboardManager 全局键盘管理器

[11.0.0] - 2026-05-12

🚀 传输扩展功能 — 送达回执 + 断点续传 + 文件分流

文件传输模块核心功能增强:消息送达回执(单条/批量已读、WebSocket 断点续传(分块传输+断点恢复+校验)、文件分流传输(按文件大小自动选择传输通道)。


已归档版本

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