Files
xianyan/docs/widget_management_dev_doc.md
Developer 6f5400ec4b feat: 5.4.0版本大更新,新增多端桌面小组件与多项功能优化
- 重构「灵感」模块为「发现」模块,统一页面命名与文案
- 新增flutter_tts语音朗读依赖与鸿蒙Nearby配对方式
- 添加Android/iOS/鸿蒙全平台桌面小组件支持(7种类型)
- 完善文件传输模块,新增画布邀请消息与删除会话功能
- 优化协作画布光标广播节流逻辑,修复已知bug
- 更新应用英文名与隐私政策入口,新增翻译API抽象层
- 移除用户中心多余的加号按钮,完善空状态组件类型
2026-05-19 05:39:50 +08:00

8.0 KiB
Raw Blame History

桌面小部件管理 — 开发文档

创建时间: 2026-05-19 | 最后更新: 2026-05-19 版本: v14.9.0 | 优先级: P0-P3 状态: 开发完成,待审计验收


一、功能概述

将个人中心「会员中心」按钮替换为「桌面小部件」,创建小部件管理页面,支持 Android/iOS/鸿蒙 三平台原生小部件的安装、数据推送、动态主题和深度链接。

二、架构设计

Flutter UI (WidgetManagementPage)
  → Riverpod State (WidgetNotifier/WidgetState)
    → HomeWidgetService (数据推送 + 主题推送 + 深度链接)
      → home_widget 插件 (MethodChannel)
        → Android: AppWidgetProvider + RemoteViews (light/dark布局切换)
        → iOS: WidgetKit + SwiftUI (WidgetColors动态配色)
        → 鸿蒙: FormExtensionAbility + ArkUI (isDark状态驱动)

三、文件清单与归档状态

Flutter 端

文件 类型 状态 说明
lib/features/widget/models/widget_type.dart 新建 已完成 8种小部件枚举+平台标识+深度链接+数据键前缀+主题键
lib/features/widget/providers/widget_provider.dart 新建 已完成 Riverpod Notifier + pushThemeToAllWidgets
lib/features/widget/presentation/widget_management_page.dart 新建 已完成 分组展示+同步主题+深度链接预览
lib/features/profile/presentation/profile_page.dart 修改 已完成 会员中心→桌面小部件
lib/core/router/app_router.dart 修改 已完成 新增/widget-management路由
lib/core/router/ohos_nav_bridge.dart 修改 已完成 鸿蒙路由桥接
lib/core/services/data/home_widget_service.dart 修改 已完成 pushThemeMode + 5种小部件数据推送 + 深度链接回调

home_widget 插件(本地 packages/home_widget

文件 类型 状态 说明
packages/home_widget/lib/src/home_widget.dart 修改 已完成 updateWidget/requestPinWidget增加ohosName参数
packages/home_widget/lib/src/home_widget_info.dart 修改 已完成 新增ohosFormId/ohosFormName字段
packages/home_widget/ohos/src/main/ets/HomeWidgetPlugin.ets 已有 已完成 鸿蒙端MethodChannel实现

Android 原生8个Provider + 16个布局 + 8个配置 + 2个drawable

文件 类型 状态 说明
DailySentenceProvider.kt 已有 已完成 P0 + dark主题
ReadlaterProvider.kt 已有 已完成 P0 + dark主题
DailyCardProvider.kt 新建 已完成 P1 + dark主题
FortuneProvider.kt 新建 已完成 P2 + dark主题
CountdownProvider.kt 新建 已完成 P2 + dark主题
PomodoroProvider.kt 新建 已完成 P3 + dark主题
SolarTermProvider.kt 新建 已完成 P3 + dark主题
CheckinProvider.kt 新建 已完成 P3 + dark主题
widget_*_dark.xml (8个) 新建 已完成 深色布局(#1C1C1E)
widget_*.xml (8个) 新建 已完成 浅色布局(#FFFFFF)
*_info.xml (8个) 新建 已完成 Widget配置
widget_background_dark.xml 新建 已完成 深色圆角背景
AndroidManifest.xml 修改 已完成 注册8个receiver

iOS 原生8个Widget + 深色主题)

文件 类型 状态 说明
ios/XianyanWidget/XianyanWidget.swift 新建 已完成 8个Widget + WidgetColors深色主题
ios/XianyanWidget/Info.plist 新建 已完成 Widget Extension配置
ios/XianyanWidget/Assets.xcassets/ 新建 已完成 Asset Catalog

鸿蒙原生8个FormAbility + 8个ArkUI页面 + 8个表单配置

文件 类型 状态 说明
*FormAbility.ets (8个) 新建 已完成 FormExtension + isDark读取
*FormPage.ets (8个) 新建 已完成 ArkUI页面 + 动态配色
*_form.json (8个) 新建 已完成 表单配置JSON
module.json5 修改 已完成 注册8个extensionAbilities
string.json (base + zh_CN) 修改 已完成 8个Widget描述字符串

四、小部件类型与优先级

小部件 优先级 Android iOS 鸿蒙 深度链接 状态
📜 每日一句 P0 /home 已完成
📖 稍后读 P0 /home?tab=readlater 已完成
🃏 日签卡片 P1 /home 已完成
🔮 每日运势 P2 /inspiration 已完成
倒计时 P2 /widget-management 已完成
🍅 番茄钟 P3 ⚠️ /widget-management 已完成
🌿 节气诗词 P3 /inspiration 已完成
每日签到 P3 /signin 已完成

已完成 | ⚠️ 鸿蒙端受限(无实时刷新) | 平台不支持

五、动态主题机制

数据流

Flutter: pushThemeMode(isDark)
  → home_widget.saveWidgetData('widget_theme_mode', 'dark'/'light')
    → Android: SharedPreferences → Provider读取 → 切换light/dark布局XML
    → iOS: UserDefaults → Provider读取 → WidgetColors动态配色
    → 鸿蒙: dataPreferences → FormAbility读取 → isDark状态驱动ArkUI

统一配色

元素 浅色 深色
背景 #FFFFFF #1C1C1E
正文 #333333 #E0E0E0
副文字 #888888 #AAAAAA
圆角 16dp 16dp

六、深度链接

路由映射

小部件 深度链接路由 说明
每日一句 /home 打开首页
稍后读 /home?tab=readlater 打开稍后读Tab
日签卡片 /home 打开首页
每日运势 /inspiration 打开灵感页
倒计时 /widget-management 打开小部件管理
番茄钟 /widget-management 打开小部件管理
节气诗词 /inspiration 打开灵感页
每日签到 /signin 打开签到页

回调处理

HomeWidgetService._backgroundCallback 处理 URI scheme homeWidget://open_<action>

七、数据键对照表

小部件 数据键 类型
每日一句 daily_sentence, daily_sentence_author String
稍后读 readlater_count, readlater_preview_text, readlater_preview_author Int, String
日签卡片 daily_sentence, daily_sentence_author String
每日运势 fortune_text, fortune_keyword String
倒计时 countdown_title, countdown_target String (ISO8601)
番茄钟 pomodoro_remaining, pomodoro_state Int, String
节气诗词 solar_term_name, solar_term_poem String
每日签到 checkin_days, checkin_today Int, Bool
主题 widget_theme_mode String ('light'/'dark')

八、审计清单

功能审计

  • Android: 8个小部件添加到桌面验证数据显示正确
  • Android: 深色模式下小部件样式正确
  • Android: 点击小部件跳转到App对应页面
  • iOS: Xcode添加Widget Extension Target后验证
  • iOS: 8个小部件数据显示正确
  • iOS: 深色模式下小部件样式正确
  • 鸿蒙: 长按桌面添加8种卡片验证数据显示
  • 鸿蒙: 深色模式下卡片样式正确
  • Flutter: 管理页面按优先级分组展示
  • Flutter: "同步主题"按钮推送当前主题到所有小部件
  • Flutter: 深度链接预览正确显示

代码审计

  • Android 8个Provider空指针检测
  • iOS 8个Provider空指针检测
  • 鸿蒙 8个FormAbility空指针检测
  • Flutter WidgetState空安全
  • MethodChannel通信异常处理
  • 深度链接路由是否已注册

待完成项

  • iOS: Xcode项目配置Widget Extension Target + App Group
  • 番茄钟实时刷新仅Android支持iOS/鸿蒙受限)
  • 小部件交互式按钮Android 12+ / iOS 17+