《HarmonyOS Next开发进阶:打造功能完备的Todo应用华章》
章节 6:日期选择器与日期处理

目标
- 学习如何使用
DatePicker组件。 - 理解日期格式化和日期计算。
内容
- 日期选择器基础
- 使用
DatePicker组件。 - 处理日期选择事件。
- 使用
- 日期格式化
- 格式化日期为友好的文本。
- 日期计算
- 判断日期是否过期或即将到期。
代码示例
@Entry
@Component
struct DatePickerDemo {
@State selectedDate: Date = new Date();
@State showDatePicker: boolean = false;
formatDate(date: Date): string {
return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}`;
}
build() {
Column() {
Text('选择日期: ' + this.formatDate(this.selectedDate))
.margin({ bottom: 16 })
Button('选择日期')
.onClick(() => { this.showDatePicker = true; })
if (this.showDatePicker) {
DatePicker({
start: new Date('2020-01-01'),
end: new Date('2030-12-31'),
selected: this.selectedDate,
})
.onChange((value: DatePickerInfo) => {
this.selectedDate = new Date(value.year, value.month - 1, value.day);
})
.margin({ bottom: 16 })
}
}
}
}
章节 7:任务统计与数据可视化
目标
- 学习如何实现任务统计。
- 理解简单的数据可视化方法。
内容
- 任务统计
- 计算任务总数和完成率。
- 按优先级统计任务数量。
- 数据可视化
- 使用简单的图表展示统计数据。
- 示例:任务统计面板
- 实现任务统计功能。
代码示例
@Entry
@Component
struct TaskStatistics {
@State todoList: TodoItem[] = [
new TodoItem('任务1', Priority.HIGH),
new TodoItem('任务2', Priority.MEDIUM),
new TodoItem('任务3', Priority.LOW)
];
getCompletionPercentage(): number {
if (this.todoList.length === 0) return 0;
const completedCount = this.todoList.filter(item => item.isCompleted).length;
return Math.round((completedCount / this.todoList.length) * 100);
}
getPriorityStats(): PriorityStatItem[] {
const highStat: PriorityStatItem = { priority: Priority.HIGH, count: 0, color: '#FF3B30' };
const mediumStat: PriorityStatItem = { priority: Priority.MEDIUM, count: 0, color: '#FF9500' };
const lowStat: PriorityStatItem = { priority: Priority.LOW, count: 0, color: '#34C759' };
this.todoList.forEach(item => {
switch (item.priority) {
case Priority.HIGH: highStat.count++; break;
case Priority.MEDIUM: mediumStat.count++; break;
case Priority.LOW: lowStat.count++; break;
}
});
return [highStat, mediumStat, lowStat];
}
build() {
Column() {
Text('任务统计')
.fontSize(24)
.fontWeight(FontWeight.Bold)
.margin({ bottom: 16 })
Text(`完成率: ${this.getCompletionPercentage()}%`)
.margin({ bottom: 16 })
ForEach(this.getPriorityStats(), (stat: PriorityStatItem) => {
Row() {
Circle()
.fill(stat.color)
.width(12)
.height(12)
.margin({ right: 8 })
Text(`${stat.priority}: ${stat.count} 个`)
}
.margin({ bottom: 8 })
})
}
}
}
章节 8:振动反馈与用户交互
目标
- 学习如何使用
@ohos.vibrator实现振动反馈。 - 理解用户交互的优化方法。
内容
- 振动反馈基础
- 使用
vibrate方法实现短振动。
- 使用
- 用户交互优化
- 在任务操作时提供振动反馈。
- 示例:振动反馈应用
- 实现用户交互时的振动效果。
代码示例
import vibrator from '@ohos.vibrator';
@Entry
@Component
struct VibrationDemo {
vibrateShort() {
try {
vibrator.vibrate(10);
} catch (error) {
console.error('Failed to vibrate:', error);
}
}
build() {
Column() {
Text('点击按钮体验振动反馈')
.margin({ bottom: 16 })
Button('短振动')
.onClick(() => this.vibrateShort())
}
}
}
章节 9:对话框与用户提示
目标
- 学习如何使用
@ohos.promptAction显示对话框。 - 理解如何处理用户输入。
内容
- 对话框基础
- 使用
showDialog方法显示对话框。
- 使用
- 用户输入处理
- 获取用户选择的结果。
- 示例:确认删除对话框
- 实现删除任务时的确认对话框。
代码示例
import promptAction from '@ohos.promptAction';
@Entry
@Component
struct DialogDemo {
async showConfirmationDialog() {
try {
const dialogButtons: Array<DialogButton> = [
{ text: '取消', color: '#8E8E93' },
{ text: '确定', color: '#FF3B30' }
];
const options: promptAction.ShowDialogOptions = {
title: '确认删除',
message: '确定要删除此任务吗?',
buttons: dialogButtons
};
const result = await promptAction.showDialog(options);
if (result && result.index === 1) {
console.log('用户确认删除');
}
} catch (error) {
console.error('对话框显示失败:', error);
}
}
build() {
Column() {
Text('点击按钮显示对话框')
.margin({ bottom: 16 })
Button('删除任务')
.onClick(() => this.showConfirmationDialog())
}
}
}
章节 10:完整Todo应用实现
目标
- 综合应用前面章节的知识,实现一个完整的Todo应用。
- 理解如何将各个功能模块整合在一起。
内容
- 功能整合
- 数据存储与加载。
- 响应式布局与主题切换。
- 任务管理与统计。
- 日期选择与振动反馈。
- 完整代码实现
- 从头到尾实现一个功能完整的Todo应用。
总结
通过以上章节的学习,用户将逐步掌握HarmonyOS Next的开发技能,从基础的环境搭建到复杂的任务管理应用实现。每个章节都包含清晰的代码示例和详细解释,帮助用户快速上手并深入理解HarmonyOS Next的开发。
《HarmonyOS Next开发进阶:打造功能完备的Todo应用华章》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- 注册表判断是否安装微软Edge浏览器
自己摸索的,注册表判断是否安装微软Edge浏览器: bool checkInstalledMsEdge() { try { using(var ieKey = Registry.LocalMachin ...
- idea创建一个入门Spring Boot项目(controller层)使用Maven代码管理
springboot的优质开发体验,能够更快速的搭建生产环境的项目.这篇文章就是一个超级简单的入门springboot项目.包含了一些简单的理论和超简单Controller层 [工具] IDEA 全称 ...
- 小程序之navigator跳转方式
navigator中的open-type可以决定小程序的跳转方式: 是否关闭当前页面 或者说以何种方式进行跳转 标签<navigator>中 open-type属性表示小程序的跳转方式: ...
- 通过Ollama本地部署DeepSeek R1以及简单使用
本文介绍了在Windows环境下,通过Ollama来本地部署DeepSeek R1.该问包含了Ollama的下载.安装.安装目录迁移.大模型存储位置修改.下载DeepSeek以及通过Web UI来对话 ...
- LeetCode 第2题:两数相加
LeetCode 第2题:两数相加 题目描述 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返 ...
- 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤
在1 使用ollama完成DeepSeek本地部署中使用ollama完成deepSeek的本地部署和运行,此时我可以在PowerShell中通过对话的方式与DeepSeek交流,但此时本地模型不具备联 ...
- ML树构建简明教程
数据准备 Teamviewer登录实验室服务器,访问http://172.17.128.86:8501/CleanData,按照页面对应的格式要求分别从NCBI和GISAID数据库下载数据,拖拽到对应 ...
- gitlab - [02] 安装部署
安装部署篇 一.5分钟搭建私人代码仓库 (1)设置环境变量:export GITLAB_HOME=/src/gitlab (2)编写docker-compose.yml mkdir -p /opt/d ...
- Kubernetes - [02] 网络通讯方式
题记部分 一.网络通讯模式 Kubernetes的网络模型假定了所有Pod都在一个可以直接连通的扁平的网络空间中,这在(GCEGoogle Compute Engine)里面是现成的网络模型,Ku ...
- 探秘Transformer之(8)--- 位置编码
探秘Transformer之(8)--- 位置编码 0x00 概述 位置编码(Positional Embedding)是一种用于处理序列数据的技术,被用来表示输入序列中的单词位置.在Transfor ...