HarmonyOs应用《日记本》开发第1篇 - 构建完整项目
背景本人很喜欢写日记所以很久之前就想做一个日记本相关的应用这次正好有这个机会就以日记本为项目目标开发一个日记本应用.日记本开发如下项目概述在本系列博客中我们将以一个完整的鸿蒙HarmonyOS日记应用为案例深入剖析 HarmonyOS ArkTS 开发的方方面面。这个日记应用虽然功能精简却涵盖了一个完整应用所需的全部核心要素——从 UI 声明式开发到数据持久化从页面路由到生命周期管理从状态管理到组件设计。应用功能一览功能模块说明日记列表卡片式展示所有日记支持加载状态和空状态日记创建支持日期选择、天气/心情标签、标题与内容输入日记编辑复用创建页面支持回填数据与更新日记详情展示完整日记内容支持编辑和删除数据持久化基于 Preferences 轻量级存储单例模式管理技术选型开发语言: ArkTSHarmonyOS 声明式 UI 开发框架应用模型: Stage 模型HarmonyOS 推荐的新一代应用模型目标平台: HarmonyOS 5.0API 12数据存储: kit.ArkData 的 Preferences 模块设计模式: 单例模式DiaryStore 数据管理层项目结构总览Daily/ ├── AppScope/ │ └── app.json5 # 应用级配置 ├── entry/ │ ├── build-profile.json5 # 模块构建配置 │ ├── oh-package.json5 # 模块包配置 │ └── src/main/ │ ├── module.json5 # 模块配置声明入口Ability │ ├── ets/ │ │ ├── entryability/ │ │ │ └── EntryAbility.ets # 入口能力UIAbility │ │ ├── model/ │ │ │ └── DiaryModel.ets # 数据模型定义 │ │ ├── utils/ │ │ │ └── DiaryStore.ets # 数据存储管理 │ │ └── pages/ │ │ ├── Index.ets # 主页日记列表 │ │ ├── DiaryEdit.ets # 日记编辑页 │ │ └── DiaryDetail.ets # 日记详情页 │ └── resources/base/ │ ├── element/ │ │ ├── color.json # 颜色资源 │ │ └── string.json # 字符串资源 │ └── profile/ │ └── main_pages.json # 页面路由配置 ├── build-profile.json5 # 项目构建配置 ├── oh-package.json5 # 项目包配置 └── hvigor/hvigor-config.json5 # Hvigor 构建工具配置架构分层设计本项目采用了清晰的分层架构┌─────────────────────────────────────────┐ │ UI 层 (Pages) │ │ Index.ets │ DiaryEdit.ets │ Detail │ ├─────────────────────────────────────────┤ │ 数据模型层 (Model) │ │ DiaryModel.ets │ ├─────────────────────────────────────────┤ │ 数据存储层 (Store) │ │ DiaryStore.ets │ ├─────────────────────────────────────────┤ │ HarmonyOS 平台层 (Platform) │ │ kit.ArkData │ kit.ArkUI │ ... │ └─────────────────────────────────────────┘各层职责UI 层负责界面展示和用户交互通过State管理组件状态模型层定义数据结构DiaryItem、枚举常量MoodList、WeatherList和辅助函数存储层封装 Preferences API提供增删改查接口采用单例模式平台层HarmonyOS 提供的系统能力 Kit核心代码速览入口能力 EntryAbilityexportdefaultclassEntryAbilityextendsUIAbility{asynconCreate(want:Want,launchParam:AbilityConstant.LaunchParam):Promisevoid{// 初始化数据存储awaitdiaryStore.init(this.context);}onWindowStageCreate(windowStage:window.WindowStage):void{windowStage.loadContent(pages/Index,(err){if(err.code){console.error(Failed to load content. cause: JSON.stringify(err));return;}console.info(Succeeded in loading content.);});}}应用启动时onCreate中异步初始化数据存储onWindowStageCreate中加载主页pages/Index。数据模型 DiaryModelexportclassDiaryItem{id:string;title:string;content:string;date:string;// 日期 YYYY-MM-DDcreateTime:number;// 创建时间戳updateTime:number;// 更新时间戳mood:string;// 心情: happy / calm / sad / excited / angryweather:string;// 天气: sunny / cloudy / rainy / snowy / overcast}数据存储 DiaryStoreexportclassDiaryStore{privatestore:preferences.Preferences|nullnull;privatestaticinstance:DiaryStore;staticgetInstance():DiaryStore{if(!DiaryStore.instance){DiaryStore.instancenewDiaryStore();}returnDiaryStore.instance;}asyncinit(context:Context):Promisevoid{this.storeawaitpreferences.getPreferences(context,{name:diary_store});}}页面路由设计pages/Index (主页) ├──→ pages/DiaryEdit (写日记/编辑日记) └──→ pages/DiaryDetail (日记详情) └──→ pages/DiaryEdit (编辑日记)页面路由在main_pages.json中声明{src:[pages/Index,pages/DiaryEdit,pages/DiaryDetail]}设计理念珊瑚红主题色整个应用以#FF6B6B珊瑚红作为主色调搭配#F5F5F5的浅灰背景和#FFFFFF的白色卡片营造出温暖、清新的视觉风格色彩用途色值说明主色调#FF6B6B珊瑚红用于按钮、选中态、强调文字背景色#F5F5F5浅灰页面背景卡片背景#FFFFFF纯白卡片和导航栏主文字#333333深灰标题和重要文字次要文字#999999中灰辅助说明提示文字#CCCCCC浅灰占位提示选中背景#FFF0F0淡粉选中态背景卡片式设计日记列表采用卡片式布局每张卡片包含顶部日期 天气 emoji 心情 emoji中部标题单行截断 内容预览两行截断底部更新时间卡片带有圆角16vp和柔和阴影视觉效果精致。环境准备开始本系列之前确保已安装以下工具DevEco StudioHarmonyOS 官方 IDEHarmonyOS SDKAPI 12HarmonyOS 5.0Node.js构建工具 Hvigor 依赖小结本篇作为系列开篇对整个日记项目进行了全景式概览。从项目结构、架构分层、核心技术选型到设计理念为后续深入各个模块打下了基础。接下来的篇章将逐一深入每个主题从配置文件到源码实现全面解析鸿蒙 ArkTS 开发的每个细节。

相关新闻

MiGPT终极指南:3步打造你的专属AI语音管家

MiGPT终极指南:3步打造你的专属AI语音管家

MiGPT终极指南:3步打造你的专属AI语音管家 【免费下载链接】mi-gpt 🏠 将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手。 项目地址: https://gitcode.com/GitHub_Trending/mi/mi-gpt 想让家里的智能音箱真正"聪明"起…

2026/7/25 6:54:25阅读更多 →
Python实现手机号关联QQ号查询:技术原理、合规实现与工程实践

Python实现手机号关联QQ号查询:技术原理、合规实现与工程实践

1. 项目概述与核心需求解析最近在技术社区和开发者群里,经常看到有人讨论“手机号逆向查询QQ号”这个需求。乍一听,这像是一个“黑科技”或者灰色地带的工具,但深入接触后我发现,很多开发者的需求其实非常正当。比如,在…

2026/7/25 6:54:25阅读更多 →
工业DPM码识别:抗强光干扰的光学与算法优化方案

工业DPM码识别:抗强光干扰的光学与算法优化方案

1. 工业读码场景下的DPM码识别痛点在汽车零部件、电子元器件、医疗器械等高端制造领域,直接部件标记(DPM)码已成为产品追溯体系的核心载体。与传统的纸质标签不同,激光雕刻或点刻形成的DPM码直接附着在金属、塑料等材料表面&#…

2026/7/25 6:52:25阅读更多 →
深度强化学习在微能源网动态优化中的应用

深度强化学习在微能源网动态优化中的应用

1. 项目背景与核心价值微能源网作为分布式能源系统的重要形态,正在重塑传统能源分配格局。这个项目聚焦于解决微电网运行中最棘手的动态优化问题——如何在风光出力波动、负荷需求变化、电价信号跳变等多重不确定因素下,实现经济性、环保性与可靠性的三维…

2026/7/25 8:14:35阅读更多 →
AI智能体评测体系的挑战与实践优化

AI智能体评测体系的挑战与实践优化

1. AI智能体评测的现状与困境最近看到北邮团队关于AI智能体评测体系的研究报告,让我想起去年参与一个开源项目时遇到的糟心事。当时我们团队开发了一个对话系统,在不同评测平台上跑分差距能达到30%以上,这就像同一个学生在A考场能拿90分&…

2026/7/25 8:14:35阅读更多 →
基于YOLOv11的麻将智能识别系统开发实践

基于YOLOv11的麻将智能识别系统开发实践

1. 项目背景与核心价值麻将作为中国传统文化的重要组成部分,其智能化识别技术近年来在多个领域展现出巨大应用潜力。这个基于YOLOv11的麻将识别系统,本质上是一个融合了计算机视觉与用户交互的完整解决方案。我在实际开发中发现,相比传统图像…

2026/7/25 8:14:35阅读更多 →
基于CNN与Unity的手势识别游戏开发实践

基于CNN与Unity的手势识别游戏开发实践

1. 项目背景与核心价值手势识别作为人机交互领域的重要研究方向,正在从实验室走向实际应用。这个毕业设计项目巧妙地将CNN深度学习模型与游戏开发相结合,实现了从理论到实践的完整闭环。我在工业级手势识别项目中的经验表明,这种"算法应…

2026/7/25 8:14:35阅读更多 →
人机协同信任机制:技术原理与实践应用

人机协同信任机制:技术原理与实践应用

1. 人机协同中的信任机制解析去年参与某医疗AI辅助诊断系统部署时,我亲眼目睹一位资深医师反复核对AI生成的肺部CT分析报告,这个场景让我深刻意识到:当人类与智能体需要共同完成关键任务时,信任就像连接两者的隐形桥梁。这种特殊的…

2026/7/25 8:14:35阅读更多 →
大模型API聚合技术:一行代码实现复杂AI功能

大模型API聚合技术:一行代码实现复杂AI功能

1. 项目概述:AI开发范式变革的前夜2026年的AI开发领域正在经历一场静默革命。三年前需要数百行代码才能实现的复杂NLP功能,如今通过一行Python调用就能完成。这种变化的核心在于大模型API聚合技术的成熟,它彻底重构了开发者与底层AI能力的交互…

2026/7/25 8:12:35阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/25 1:01:14阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/25 1:01:14阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/25 1:01:14阅读更多 →
突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决您的…

2026/7/25 0:01:16阅读更多 →
C++ string类模拟实现:从深拷贝到内存管理的完整指南

C++ string类模拟实现:从深拷贝到内存管理的完整指南

1. 项目概述:为什么我们要“手撕”string类?在C的学习道路上,尤其是从C语言过渡到C的“初阶”阶段,string类绝对是一个绕不开的核心。标准库里的std::string用起来太方便了,、find、substr,几个操作符和函数…

2026/7/25 0:01:16阅读更多 →
三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

1. 先搞清楚“三角洲寻宝鼠”到底是什么工具从名称来看,“三角洲寻宝鼠”更像是一个资源查找或文件检索类工具,而不是游戏或娱乐软件。这类工具的核心价值在于帮助用户快速定位特定资源,比如文档、图片、压缩包或特定格式的文件。如果你经常需…

2026/7/25 0:01:16阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/24 23:01:03阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/24 19:00:40阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/24 19:00:40阅读更多 →