news 2026/7/22 1:26:23

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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. 功能螺旋上升:在模板基础上不断扩展和增强
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/22 17:29:39

11款AI搜索引擎评测:改变信息获取的游戏规则

1. 当AI遇上搜索&#xff1a;11款改变游戏规则的智能引擎作为一名长期关注AI技术落地的从业者&#xff0c;我见证了搜索引擎从关键词匹配到语义理解的进化历程。2023年AI大模型的爆发性增长&#xff0c;彻底重塑了搜索体验的边界。这些新型工具不仅能理解自然语言提问&#xff…

作者头像 李华
网站建设 2026/7/22 15:01:15

基于Spring Boot+Vue的网上问卷调查系统

选题背景 随着信息技术的快速发展&#xff0c;互联网已经成为人们获取信息、交流互动的重要平台。问卷调查作为一种传统的数据收集方式&#xff0c;正在逐步向数字化、智能化转型。传统的纸质问卷调查存在效率低、成本高、数据整理繁琐等问题&#xff0c;而基于Web的在线问卷调…

作者头像 李华
网站建设 2026/7/22 10:17:04

Claude Code 的 /rewind,为什么回到旧回合还能吃到缓存

今天讨论的这个点很小,却很容易影响 Claude Code 长会话里的体感速度和成本判断。很多人看到 /rewind,直觉会把它理解成一种撤销,像 Git 里把分支退回旧提交,或者像 IDE 里把文件恢复到某个历史版本。但在 Claude Code 里,/rewind 牵涉的不只是代码文件,还牵涉对话历史、…

作者头像 李华
网站建设 2026/7/22 4:48:00

Akagi麻将AI助手:如何用人工智能彻底改变你的麻将学习方式

Akagi麻将AI助手&#xff1a;如何用人工智能彻底改变你的麻将学习方式 【免费下载链接】Akagi 支持雀魂、天鳳、麻雀一番街、天月麻將&#xff0c;能夠使用自定義的AI模型實時分析對局並給出建議&#xff0c;內建Mortal AI作為示例。 Supports Majsoul, Tenhou, Riichi City, A…

作者头像 李华
网站建设 2026/7/22 6:28:59

LDDC歌词工具终极指南:三步搞定精准逐字歌词下载与匹配

LDDC歌词工具终极指南&#xff1a;三步搞定精准逐字歌词下载与匹配 【免费下载链接】LDDC 简单易用的精准歌词(逐字歌词/卡拉OK歌词)下载匹配工具|A simple and user-friendly tool for downloading and matching precise lyrics (word-by-word lyrics/Karaoke lyrics) 项目地…

作者头像 李华
网站建设 2026/7/22 6:25:21

C语言高性能编程:从内存管理到编译器优化的核心技术解析

在实际系统编程、嵌入式开发和高性能计算领域&#xff0c;C语言依然是无可争议的基石。尽管现代高级语言层出不穷&#xff0c;但在追求极致性能、直接硬件操作和资源精确控制的场景下&#xff0c;C语言凭借其贴近硬件的特性、简洁高效的编译模型和强大的指针能力&#xff0c;始…

作者头像 李华