章节 6:日期选择器与日期处理

目标

  • 学习如何使用DatePicker组件。
  • 理解日期格式化和日期计算。

内容

  1. 日期选择器基础

    • 使用DatePicker组件。
    • 处理日期选择事件。
  2. 日期格式化
    • 格式化日期为友好的文本。
  3. 日期计算
    • 判断日期是否过期或即将到期。

代码示例

@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:任务统计与数据可视化

目标

  • 学习如何实现任务统计。
  • 理解简单的数据可视化方法。

内容

  1. 任务统计

    • 计算任务总数和完成率。
    • 按优先级统计任务数量。
  2. 数据可视化
    • 使用简单的图表展示统计数据。
  3. 示例:任务统计面板
    • 实现任务统计功能。

代码示例

@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实现振动反馈。
  • 理解用户交互的优化方法。

内容

  1. 振动反馈基础

    • 使用vibrate方法实现短振动。
  2. 用户交互优化
    • 在任务操作时提供振动反馈。
  3. 示例:振动反馈应用
    • 实现用户交互时的振动效果。

代码示例

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显示对话框。
  • 理解如何处理用户输入。

内容

  1. 对话框基础

    • 使用showDialog方法显示对话框。
  2. 用户输入处理
    • 获取用户选择的结果。
  3. 示例:确认删除对话框
    • 实现删除任务时的确认对话框。

代码示例

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应用。
  • 理解如何将各个功能模块整合在一起。

内容

  1. 功能整合

    • 数据存储与加载。
    • 响应式布局与主题切换。
    • 任务管理与统计。
    • 日期选择与振动反馈。
  2. 完整代码实现
    • 从头到尾实现一个功能完整的Todo应用。

总结

通过以上章节的学习,用户将逐步掌握HarmonyOS Next的开发技能,从基础的环境搭建到复杂的任务管理应用实现。每个章节都包含清晰的代码示例和详细解释,帮助用户快速上手并深入理解HarmonyOS Next的开发。

《HarmonyOS Next开发进阶:打造功能完备的Todo应用华章》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. 注册表判断是否安装微软Edge浏览器

    自己摸索的,注册表判断是否安装微软Edge浏览器: bool checkInstalledMsEdge() { try { using(var ieKey = Registry.LocalMachin ...

  2. idea创建一个入门Spring Boot项目(controller层)使用Maven代码管理

    springboot的优质开发体验,能够更快速的搭建生产环境的项目.这篇文章就是一个超级简单的入门springboot项目.包含了一些简单的理论和超简单Controller层 [工具] IDEA 全称 ...

  3. 小程序之navigator跳转方式

    navigator中的open-type可以决定小程序的跳转方式: 是否关闭当前页面 或者说以何种方式进行跳转 标签<navigator>中 open-type属性表示小程序的跳转方式: ...

  4. 通过Ollama本地部署DeepSeek R1以及简单使用

    本文介绍了在Windows环境下,通过Ollama来本地部署DeepSeek R1.该问包含了Ollama的下载.安装.安装目录迁移.大模型存储位置修改.下载DeepSeek以及通过Web UI来对话 ...

  5. LeetCode 第2题:两数相加

    LeetCode 第2题:两数相加 题目描述 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返 ...

  6. 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤

    在1 使用ollama完成DeepSeek本地部署中使用ollama完成deepSeek的本地部署和运行,此时我可以在PowerShell中通过对话的方式与DeepSeek交流,但此时本地模型不具备联 ...

  7. ML树构建简明教程

    数据准备 Teamviewer登录实验室服务器,访问http://172.17.128.86:8501/CleanData,按照页面对应的格式要求分别从NCBI和GISAID数据库下载数据,拖拽到对应 ...

  8. gitlab - [02] 安装部署

    安装部署篇 一.5分钟搭建私人代码仓库 (1)设置环境变量:export GITLAB_HOME=/src/gitlab (2)编写docker-compose.yml mkdir -p /opt/d ...

  9. Kubernetes - [02] 网络通讯方式

    题记部分 一.网络通讯模式   Kubernetes的网络模型假定了所有Pod都在一个可以直接连通的扁平的网络空间中,这在(GCEGoogle Compute Engine)里面是现成的网络模型,Ku ...

  10. 探秘Transformer之(8)--- 位置编码

    探秘Transformer之(8)--- 位置编码 0x00 概述 位置编码(Positional Embedding)是一种用于处理序列数据的技术,被用来表示输入序列中的单词位置.在Transfor ...