《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 安装并启动 ...
随机推荐
- Asp.net Core Kestrel 免费实现https
0.概述 先了解下https是个啥: https://www.bilibili.com/video/BV1j7411H7vV so!只要给我们的web服务器配置一个证书就行了,证书可以买,也可以用免费 ...
- abp.vNext mvc版中的js和css
在创建vNextmvc版本后运行起来,F12可以看到如下js.css请求 这些文件来源: XXXX.Web/libs文件夹 /libs/abp/aspnetcore-mvc-ui-theme-shar ...
- 开箱你的 AI 语音女友「GitHub 热点速览」
随着大模型 API 服务的不断丰富,开发者无需再依赖昂贵的硬件,也能轻松开发出拥有强大 AI 能力的应用.这不仅降低了技术门槛,也激发了极客们的创造力. 就比如上周飙升 1.5k Star 的开源项目 ...
- 你所不知道的 C/C++ 宏知识——基于《C/C++ 宏编程的艺术》
前言 刚学 C++ 的时候,就知道它糅合了四种编程模式:基于预处理器的宏.基于 C 语言的面向过程.基于类的面向对象.以及基于模板的泛型编程.其中,宏和模板元编程因为是在编译期出结果,能有效提升程序运 ...
- bullyBox pg walkthrough Intermediate
nmap 发现80 和 22端口 访问80 端口发现 跳转 http://bullybox.local/ 在/etc/hosts 里面加上这个域名 dirsearch 扫描的时候发现了.git泄露 用 ...
- DataGrip中执行ORACL语句块进行代码测试
--语句块执行使用关键字declare声明变量,变量间分号隔开,SELECT INTO语句给变量赋值,语句块放到BEGIN END之间. declare v_id int; v_val varchar ...
- 第3章 在C#中创建类型
第3章 在C#中创建类型 3.1 类 复杂的类可能包含如下内容: 在 class 关键字之前:类特性(Attribute)和类修饰符.非嵌套的类修饰符有:public.internal.abs ...
- HPC中常见的调度器介绍
本文分享自天翼云开发者社区<HPC中常见的调度器介绍> 作者:土豆炒肉丝 在高性能计算(HPC)环境中,调度器是负责管理和分配计算资源(如计算节点.处理器核心.内存等)给待执行任务的重要组 ...
- ubuntu通过tar包安装mysql5.7.21
作者:zuoguohui 一.场景:最近想搞mysql主从复制,需要在两台服务器上安装mysql,之前有一台已经装好了mysql5.7.21,于是在另外一台上也装mysql5.7.21,安装过程中碰到 ...
- SqlServer中常用的一些操作语句
我们在维护数据库数据的时候,通常会用到各种SQL语句对数据进行操作或者维护,如:查看某个数据库中有哪些用户数据表.每个数据表中总共有多少条数据-- SqlServer官方地址:https://lear ...