当前位置: 首页 > news >正文

HarmonyOs应用《重要日》开发第29篇 - 重要日设计需注意的地方

本文对比分析《重要日》项目待办事项应用到重要日管理应用的设计演进,包括数据模型升级、颜色系统扩展、通知机制、日历标记增强、统计功能新增等方面该学习注意的地方。

一、演进背景

定位场景

项目定位核心场景
ImportantDays重要日管理倒数/正数、纪念日、提醒

从"管理要做什么"到"管理值得期待的日子",定位的转变驱动了所有功能。

二、数据模型

ImportantDays: ImportantDay

ImportantDay: - dayID: string - title: string - targetDate: Date - isCountdown: boolean ← 新增 - color: string ← 新增(替代 priority) - reminderEnabled: boolean ← 新增 - reminderDaysBefore: number ← 新增 - note: string ← 新增 - isPinned: boolean ← 新增 - createTime: Date
特性ImportantDay
计数模式倒数/正数
颜色16色自定义
提醒提前N天提醒
备注
置顶
完成状态无(重要日不需要"完成")

核心:倒数/正数模式

@TraceisCountdown:boolean;getDaysDiff():number{...}getDisplayText():string{constdiff=this.getDaysDiff();if(diff===0)return'就是今天';if(this.isCountdown){returndiff>0?`还有${diff}`:`已过${Math.abs(diff)}`;}else{returndiff<0?`${Math.abs(diff)}`:`还有${diff}`;}}

这是最重要的特殊设计——同一个模型支持两种计数方式,适用于不同的纪念场景。

移除完成状态

TodoItem 有isCompleted属性,ImportantDay 移除了它。原因:

  • 待办事项需要"完成"状态
  • 重要日是时间节点,不存在"完成"概念
  • 倒数/正数模式已经表达了时间状态

三、颜色系统扩展

ImportantDays: 16色自定义颜色

exportconstPRESET_COLORS:string[]=['#FF6B6B','#4ECDC4','#45B7D1','#FFA07A','#98D8C8','#F7DC6F','#BB8FCE','#85C1E2','#F8B739','#52BE80','#EC7063','#5DADE2','#48C9B0','#F4D03F','#AF7AC5','#85929E'];

颜色分析

从"优先级颜色"到"自定义颜色"的设计:

  • 优先级是系统定义的,用户选择有限
  • 自定义颜色让用户自由分类(如红色=生日、蓝色=工作、绿色=旅行)
  • 颜色贯穿整个应用,增强视觉识别

四、通知机制改进

ImportantDays: 提前N天提醒

@TracereminderEnabled:boolean;@TracereminderDaysBefore:number;shouldRemind():boolean{if(!this.reminderEnabled)returnfalse;constdiff=this.getDaysDiff();returndiff>=0&&diff<=this.reminderDaysBefore;}

设计分析

特性ImportantDays
提醒时机提前N天
可配置可配置天数
权限管理完整权限流程
检查机制启动+前台检查
通知跳转WantAgent跳转
通知管理创建/覆盖/取消

新增的权限管理

// 权限请求staticasyncrequestPermission():Promise<boolean>{awaitnotificationManager.requestEnableNotification();returntrue;}// 权限检查staticasynccheckPermission():Promise<boolean>{returnawaitnotificationManager.isNotificationEnabled();}

新增的 WantAgent 跳转

staticasyncgetDefaultWantAgent():Promise<WantAgent>{constwantAgentInfo:wantAgent.WantAgentInfo={wants:[{bundleName:'com.importantdays.app',abilityName:'EntryAbility',action:'action.system.home'}],actionType:wantAgent.OperationType.START_ABILITY,// ...};returnawaitwantAgent.getWantAgent(wantAgentInfo);}

五、日历标记增强

ImportantDays: 颜色圆点+标题预览

// 月视图日期项if(this.hasImportantDay(dateModel)){// 颜色圆点(最多3个)Row(){ForEach(this.getImportantDays(dateModel).slice(0,3),(day)=>{Circle({width:5,height:5}).fill(day.color)})}// 标题预览Text(this.getFirstDayShortText(dateModel)).fontColor(this.getFirstDayColor(dateModel))}

设计分析

特性ImportantDays
标记方式颜色圆点+标题
颜色区分每个重要日独立颜色
多标记最多3个圆点
标题预览显示第一个重要日标题
年视图12月小日历+标记
日期文字颜色有重要日时用重要日颜色

六、统计功能新增

ImportantDays: 四维统计

getStats():Stats{return{total:this.allDays.length,upcoming:this.getUpcomingDays().length,past:this.getPastDays().length,today:this.getTodayDays().length};}

统计的 UI 呈现

列表页: 12 5 1 6 全部 即将 今天 已过 我的页: ┌────────────────────────────────────┐ │ 12 5 1 6 │ │ 全部 即将 今天 已过 │ └────────────────────────────────────┘

统计功能让用户快速了解重要日的整体分布。

七、排序与置顶

ImportantDays: 多维度排序+置顶

getSortedList(sortType:SortTypeEnum):ImportantDay[]{// 置项优先// 然后按 DATE_ASC / DATE_DESC / CREATE_TIME 排序}asynctogglePin(dayID:string):Promise<void>{day.isPinned=!day.isPinned;}

设计分析

特性ImportantDays
排序方式3种循环切换
置顶
排序与置顶置顶独立于排序

八、架构改进

状态管理升级

特性ImportantDays
装饰器V2 (@ComponentV2,@Local,@Param)
可观察类@ObservedV2+@Trace
观察粒度属性级

日历架构设计

特性ImportantDays
日历视图年/月/周视图
无限滚动Swiper+LazyForEach
数据源IDataSource 实现
日期导航前后月+今天+选择器

ViewModel 分层

特性ImportantDays
数据管理ImportantDayManager 单例
日历状态CalendarVM 单例
数据源CalendarDataSource

九、设计总结表

模板特性本项目设计
待办事项ImportantDay 重要日
颜色16色自定义颜色选择器
基础通知重要日提前N天提醒
日历标记待办日历标记重要日(圆点+标题)
统计统计面板(全部/即将/今天/已过)
置顶支持置顶和多种排序
状态管理V2状态管理
月视图年/月视图+无限滚动

十、改进的设计理念

1. 从"任务"到"时间节点"

ImportantDays 关注"什么时候到来"(时间节点)。这个设计驱动了:

  • 移除完成状态
  • 新增倒数/正数模式
  • 增强日历功能

2. 从"统一"到"个性化"

ImportantDays 的颜色由用户自由选择。这个设计体现了:

  • 16色自定义选择器
  • 颜色贯穿所有 UI
  • 颜色与模式联动

3. 从"被动"到"主动"

ImportantDays 的提醒是主动检查的。这个设计体现在:

  • 提前N天提醒
  • 启动+前台双重检查
  • 完整的权限管理流程

4. 从"简单"到"专业"

ImportantDays 是专业的重要日管理工具。这个设计体现在:

  • 多视图日历
  • 统计面板
  • 排序与置顶
  • 年视图鸟瞰

十一、总结

ImportantDays 的设计之路展示了:

  1. 定位驱动设计:应用定位的转变驱动所有功能
  2. 模型即核心:数据模型的升级是一切设计的基础
  3. 用户体验优先:每个设计都直接提升用户体验
  4. 架构与时俱进:从 V1 到 V2 的状态管理设计
  5. 功能螺旋上升:在模板基础上不断扩展和增强
http://www.cnnetsun.cn/news/3529590.html

相关文章:

  • 11款AI搜索引擎评测:改变信息获取的游戏规则
  • 基于Spring Boot+Vue的网上问卷调查系统
  • Claude Code 的 /rewind,为什么回到旧回合还能吃到缓存
  • Akagi麻将AI助手:如何用人工智能彻底改变你的麻将学习方式
  • LDDC歌词工具终极指南:三步搞定精准逐字歌词下载与匹配
  • C语言高性能编程:从内存管理到编译器优化的核心技术解析
  • C++性能优化进阶:内存对齐、移动语义与并发编程实战
  • 【愚公系列】《移动端AI应用开发》046-基于DeepSeek的Android、iOS端应用插件开发实战(Android应用发布与运维管理)
  • 踮脚运动的科学原理与健康实践指南
  • PyPortfolioOpt终极指南:用Python实现专业级投资组合优化的完整教程
  • 3分钟搞定多设备键鼠共享:Barrier终极免费解决方案
  • 跟网型T型三电平逆变器低电压穿越(LVRT)+改进电流环+中点电位平衡控制仿真(Simulink仿真实现)
  • 模板驱动型文档自动化:从填空到智能交付的实战指南
  • AI编码工具真实成本结构:CTO必知的六大隐性支出
  • 浏览器端音频解密终极指南:Unlock Music 技术深度解析
  • LIN总线错误检测与中断处理:从协议到实现的深度解析
  • 工业人形机器人落地风险解析|工厂规避误区稳健落地方案
  • 算法好题 2026.7.18
  • 5个实用场景!mlx-community/gemma-4-e2b-it-mxfp8让Mac变身AI助手
  • atom-in-orbit项目深度解析:为什么我们需要浏览器版的Atom编辑器
  • 衡量AI时代真实价值:OpenAI “每美元有效智能“ 评分框架深度解读
  • 基于stm32f103c8t6最小系统板的ws2812b广告牌设计——桂林电子科技大学软硬件小学期课设
  • AI Agent时代Skill安全防护全解析
  • NET+AI | Harness | MAF 1.4 发布,Harness Engineering 如约而至,智能体工程化更进一步
  • d3d8to9完全解析:让Direct3D 8经典游戏在Windows 10/11上完美运行的终极指南
  • 番茄小说下载器完整指南:免费开源工具实现小说离线阅读自由
  • 2026香港EMBA QS排名择校测评:民企老板避坑性价比榜单
  • 鸿蒙 ArkTS 实战:Kitchen Cleaning Plan 从厨房清洁计划到餐厨体验工具完整解析
  • Unity多线程编程终极解决方案:UnityMainThreadDispatcher完整使用指南
  • 如何为Grok4.5写出更清晰的指令?一篇讲透Prompt结构化技巧与实战方法