📱 闲言APP — 桌面小部件管理方案

将「会员中心」替换为「桌面小部件」入口 · 创建小部件管理页面 · 三端原生代码适配

🔄 变更概览
1 profile_page 会员中心 → 桌面小部件
2 新建 WidgetManagementPage
3 扩展 HomeWidgetService
4 Android 原生 Widget 实现
5 iOS Widget Extension 实现
6 鸿蒙 Form Extension 实现
💡 项目已有 home_widget 本地 fork(v0.9.1-ohos.1),支持 Android/iOS/鸿蒙三端。 已有 HomeWidgetService 封装稍后读计数和每日一句数据推送。 本次扩展将新增更多小部件类型,并创建可视化管理页面。
🧩 可创建的小部件分析
✅ 已有基础
📜
每日一句
DailySentenceWidget
每日推送一条精选句子,含作者和出处。支持小/中两种尺寸。
iOS Android 鸿蒙 2×1 / 4×1
闲言 · 每日一句
"人生如逆旅,我亦是行人。"
—— 苏轼
✅ 已有基础
📖
稍后读
ReadlaterWidget
显示稍后读未读数量和最新一条预览。点击直接打开稍后读列表。
iOS Android 鸿蒙 2×1 / 4×2
闲言 · 稍后读
12
条未读
山有木兮木有枝,心悦君兮...
🆕 新增
🃏
日签卡片
DailyCardWidget
展示精美日签卡片,含日期、句子和背景图。每日自动更新。
iOS Android 鸿蒙 4×2 / 4×3
闲言 · 日签
5月19日
落霞与孤鹜齐飞,
秋水共长天一色。
—— 王勃《滕王阁序》
🆕 新增
🔮
每日运势
DailyFortuneWidget
展示今日运势指数和幸运关键词。趣味性强,适合桌面展示。
iOS Android 鸿蒙 2×1 / 2×2
闲言 · 今日运势
🌟
大吉
幸运色:青绿 · 宜:读书
🆕 新增
倒计时
CountdownWidget
自定义倒计时事件,显示剩余天数。适合考试、节日等场景。
iOS Android 鸿蒙 2×1 / 4×1
闲言 · 倒计时
28
天后
距离 高考
🆕 新增
🍅
番茄钟
PomodoroWidget
桌面快捷启动番茄钟,显示当前专注进度。交互式小组件。
iOS ⚠️ Android 鸿蒙 2×2 / 4×2
闲言 · 番茄钟
25:00
点击开始专注
🆕 新增
🌿
节气诗词
SolarTermWidget
展示当前节气信息和对应诗词。文化气息浓厚,适合桌面展示。
iOS Android 鸿蒙 2×2 / 4×2
闲言 · 节气
🌾
小满
5月21日 · 夏熟作物初熟
夜莺啼绿柳,皓月醒长空
🆕 新增
每日签到
CheckinWidget
展示连续签到天数和今日签到状态。桌面快捷签到按钮。
iOS Android 鸿蒙 2×1 / 4×1
闲言 · 签到
连续签到
7天
今日签到
📱 管理页面 UI 方案
💡 长按桌面空白处可添加小部件,或在下方点击「添加到桌面」
已添加的小部件
📜
每日一句
每日推送精选句子 · 已添加到桌面
📖
稍后读
12条未读 · 已添加到桌面
🃏
日签卡片
精美日签 · 已添加但未启用
更多小部件
🔮
每日运势
今日运势指数和幸运关键词
倒计时
自定义倒计时事件
🍅
番茄钟
桌面快捷专注计时
🌿
节气诗词
当前节气与对应诗词
每日签到
连续签到天数和快捷签到
平台说明
⚠️ iOS 小部件需在 WidgetKit 中配置;Android 需在系统桌面长按添加; 鸿蒙需通过服务卡片添加。各平台操作方式略有差异。
🌍 跨平台兼容性分析
Android
API 26+ (Android 8.0)
AppWidgetProvider
RemoteViews 布局
Glance (Jetpack)
requestPinWidget
交互式按钮
自由缩放
后台更新
renderFlutterWidget
iOS
iOS 16+ (WidgetKit)
WidgetKit Extension
SwiftUI 视图
Small/Medium/Large
Live Activity
⚠️ 交互式按钮 (iOS 17+)
⚠️ 番茄钟实时刷新受限
App Group 数据共享
renderFlutterWidget
HarmonyOS
API 12+ (Form Extension)
Form Extension
ArkTS/ArkUI 布局
1×2 / 2×2 / 2×4 / 4×4
⚠️ 交互能力有限
无 requestPinWidget
无实时刷新
Preferences 数据共享
无 renderFlutterWidget
小部件 Android iOS 鸿蒙 优先级
📜 每日一句 ✅ 完整 ✅ 完整 ⚠️ 基础 P0
📖 稍后读 ✅ 完整 ✅ 完整 ⚠️ 基础 P0
🃏 日签卡片 🆕 新增 🆕 新增 🆕 新增 P1
🔮 每日运势 🆕 新增 🆕 新增 🆕 新增 P2
⏳ 倒计时 🆕 新增 🆕 新增 🆕 新增 P2
🍅 番茄钟 🆕 新增 ⚠️ 受限 ⚠️ 受限 P3
🌿 节气诗词 🆕 新增 🆕 新增 🆕 新增 P3
✅ 每日签到 🆕 新增 🆕 新增 🆕 新增 P3
🏗️ 架构设计与文件结构
Flutter UI
WidgetManagementPage
WidgetCard
WidgetProvider
Flutter Service
HomeWidgetService
WidgetDataSync
WidgetClickHandler
home_widget
saveWidgetData
updateWidget
getInstalledWidgets
registerInteractivityCallback
Native
AppWidgetProvider
RemoteViews
WidgetKit
SwiftUI
FormExtension
ArkUI
lib/features/widget/ ├── models/ │ ├── widget_type.dart // 小部件类型枚举 + 元数据 │ └── widget_config.dart // 小部件配置模型 ├── presentation/ │ ├── widget_management_page.dart // 管理页面主入口 │ └── widgets/ │ ├── widget_card.dart // 单个小部件卡片组件 │ ├── widget_preview.dart // 小部件预览组件 │ └── platform_guide.dart // 平台操作指引组件 ├── providers/ │ └── widget_provider.dart // 小部件状态管理 └── services/ └── widget_data_service.dart // 小部件数据推送服务 lib/core/services/data/ └── home_widget_service.dart // ← 扩展:新增多种小部件数据推送 lib/core/registry/ └── page_registry.dart // ← 修改:注册新路由 lib/features/profile/ └── profile_page.dart // ← 修改:会员中心 → 桌面小部件
android/app/src/main/ ├── kotlin/com/xianyan/ │ ├── MainActivity.kt // ← 已有 │ └── widget/ │ ├── DailySentenceProvider.kt // 每日一句 WidgetProvider │ ├── ReadlaterProvider.kt // 稍后读 WidgetProvider │ ├── DailyCardProvider.kt // 日签卡片 WidgetProvider │ ├── FortuneProvider.kt // 每日运势 WidgetProvider │ ├── CountdownProvider.kt // 倒计时 WidgetProvider │ ├── PomodoroProvider.kt // 番茄钟 WidgetProvider │ ├── SolarTermProvider.kt // 节气诗词 WidgetProvider │ └── CheckinProvider.kt // 每日签到 WidgetProvider ├── res/ │ ├── layout/ │ │ ├── widget_daily_sentence.xml // 每日一句布局 │ │ ├── widget_readlater.xml // 稍后读布局 │ │ ├── widget_daily_card.xml // 日签卡片布局 │ │ ├── widget_fortune.xml // 运势布局 │ │ ├── widget_countdown.xml // 倒计时布局 │ │ ├── widget_pomodoro.xml // 番茄钟布局 │ │ ├── widget_solar_term.xml // 节气布局 │ │ └── widget_checkin.xml // 签到布局 │ ├── drawable/ │ │ └── widget_background_*.xml // 各样式背景 │ └── xml/ │ ├── widget_daily_sentence_info.xml │ ├── widget_readlater_info.xml │ ├── widget_daily_card_info.xml │ ├── widget_fortune_info.xml │ ├── widget_countdown_info.xml │ ├── widget_pomodoro_info.xml │ ├── widget_solar_term_info.xml │ └── widget_checkin_info.xml └── AndroidManifest.xml // ← 注册 receiver
ios/ ├── Runner/ // ← 已有 └── XianyanWidgets/ // Widget Extension (新增) ├── XianyanWidgets.swift // Widget 入口 + TimelineProvider ├── DailySentenceWidget.swift // 每日一句视图 ├── ReadlaterWidget.swift // 稍后读视图 ├── DailyCardWidget.swift // 日签卡片视图 ├── FortuneWidget.swift // 每日运势视图 ├── CountdownWidget.swift // 倒计时视图 ├── PomodoroWidget.swift // 番茄钟视图 (iOS 17+) ├── SolarTermWidget.swift // 节气诗词视图 ├── CheckinWidget.swift // 每日签到视图 ├── Assets.xcassets/ │ └── WidgetBackground.imageset/ └── Info.plist // 需在 Xcode 中添加 Widget Extension Target // App Group: group.com.xianyan.share // 支持 Small / Medium / Large 三种尺寸
ohos/ ├── entry/src/main/ets/ │ ├── entryability/ │ │ └── EntryAbility.ets // ← 已有 │ └── widget/ // Form Extension (新增) │ ├── DailySentenceForm.ets // 每日一句卡片 │ ├── ReadlaterForm.ets // 稍后读卡片 │ ├── DailyCardForm.ets // 日签卡片 │ ├── FortuneForm.ets // 每日运势卡片 │ ├── CountdownForm.ets // 倒计时卡片 │ ├── SolarTermForm.ets // 节气诗词卡片 │ └── CheckinForm.ets // 每日签到卡片 ├── entry/src/main/resources/ │ └── base/profile/ │ ├── widget_daily_sentence.json // 卡片配置 │ ├── widget_readlater.json │ ├── widget_daily_card.json │ ├── widget_fortune.json │ ├── widget_countdown.json │ ├── widget_solar_term.json │ └── widget_checkin.json └── module.json5 // ← 注册 ExtensionAbility // 鸿蒙使用 FormExtensionAbility // 数据通过 Preferences 共享 // 布局使用 ArkUI 声明式语法 // 番茄钟因实时刷新限制,鸿蒙端暂不实现
📋 实施计划
阶段 内容 涉及文件
P0 1. 修改入口按钮
profile_page 会员中心 → 桌面小部件
路由 /member → /widget-management
profile_page.dart, page_registry.dart, app_router.dart
P0 2. 创建管理页面
WidgetManagementPage + Provider
展示已安装/可添加小部件列表
平台操作指引
widget_management_page.dart, widget_provider.dart, widget_type.dart
P0 3. 扩展 HomeWidgetService
新增日签/运势/倒计时/节气/签到数据推送
统一数据 Key 管理
home_widget_service.dart, widget_data_service.dart
P0 4. Android 原生实现
8个 AppWidgetProvider + 布局 XML
AndroidManifest 注册
android/app/src/main/kotlin/com/xianyan/widget/
P0 5. iOS Widget Extension
Xcode 添加 Widget Extension Target
WidgetKit + SwiftUI 视图
App Group 数据共享
ios/XianyanWidgets/
P1 6. 鸿蒙 Form Extension
FormExtensionAbility + ArkUI
module.json5 注册
Preferences 数据共享
ohos/entry/src/main/ets/widget/
P2 7. 交互式小部件
番茄钟实时刷新 (Android Glance)
签到按钮交互
iOS 17+ Button Intent
PomodoroProvider, CheckinProvider
⚠️ 注意事项:
1. iOS Widget Extension 需在 Xcode 中手动添加 Target,无法通过 Flutter CLI 自动完成
2. 鸿蒙 Form Extension 需在 DevEco Studio 中配置,module.json5 需手动注册
3. Android 的 requestPinWidget 仅部分启动器支持
4. 番茄钟小部件在 iOS/鸿蒙上受系统限制,无法实时刷新倒计时
5. 各平台小部件更新频率受系统限制(Android 最少30分钟,iOS 由系统决定)