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

章节 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应用。
代码示例

(完整代码见用户提供的代码)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/76561.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

迅饶科技X2Modbus网关-GetUser信息泄露漏洞

免责声明&#xff1a;本号提供的网络安全信息仅供参考&#xff0c;不构成专业建议。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权&#xff0c;请及时与我联系&#xff0c;我将尽快处理并删除相关内容。 漏洞描述 该漏洞的存在是由于GetUser接口在…

Go 原理剖析:数据结构之字符串

在 Go 语言中&#xff0c;字符串&#xff08;string&#xff09;是一个非常重要的数据类型。它看似简单&#xff0c;但背后却隐藏着不少有趣的原理和优化技巧。今天我们就来聊聊 Go 中字符串的底层结构、特性&#xff0c;以及如何高效地使用它。 1. 字符串的底层结构 字符串的…

【SPP】蓝牙链路控制(LC)在SPP中互操作性深度解析

在蓝牙协议栈的精密分层体系中&#xff0c;其链路控制&#xff08;Link Control, LC&#xff09;层作为基带层的核心组件&#xff0c;承载着物理信道管理、连接建立与维护等关键任务。其互操作性要求直接决定了不同厂商设备能否实现无缝通信。本文将以蓝牙技术规范中的LC互操作…

Windows C++ 排查死锁

开发出来应用程序突然间卡死不动&#xff0c;如果其中是因为死锁问题卡列该如何排查 下面是一个简单的死锁例子 #include <iostream> #include <thread> #include <mutex>std::mutex a, b;void function_a() {std::lock_guard<std::mutex> _x(a);std:…

【零基础入门unity游戏开发——2D篇】2D 游戏场景地形编辑器——TileMap的使用介绍

考虑到每个人基础可能不一样&#xff0c;且并不是所有人都有同时做2D、3D开发的需求&#xff0c;所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】&#xff1a;主要讲解C#的基础语法&#xff0c;包括变量、数据类型、运算符、…

【易订货-注册/登录安全分析报告】

前言 由于网站注册入口容易被机器执行自动化程序攻击&#xff0c;存在如下风险&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露&#xff0c;不符合国家等级保护的要求。短信盗刷带来的拒绝服务风险 &#xff0c;造成用户无法登陆、注册&#xff0c;大量收到垃圾短信的…

GLPI 未授权SQL注入漏洞(CVE-2025-24799)

免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 0x0…

基于Deepface的情绪识别c++

基于Deepface的情绪识别c 文章目录 基于Deepface的情绪识别c简介下载模型并转为onnx&#xff08;facial_expression_model_weights.h5&#xff09;测试取出照片的人脸部分并处理成模型输入格式用模型推理一下看看结果 用onnxruntime的c库推理 简介 DeepFace是一个基于深度学习…

Java的数据库编程——JDBC基础

JDBC编程 一、概述1.1 概念介绍1.2 驱动包下载1.3 导入驱动包 二、通过Java程序操作数据库2.1 通过 JDBC 进行 插入数据 操作2.1.1 创建“数据源(DataSource)——描述要操作的数据库、数据是在哪”2.1.2 与服务器建立连接2.1.3 构造sql语句&#xff0c;并且对字符串类型的sql进…

DeepSeek-R1 面试题汇总

Deepseek-r1 面试宝典 原文地址&#xff1a;https://articles.zsxq.com/id_91kirfu15qxw.html DeepSeek-R1 面试题汇总 DeepSeek-R1 面试题汇总 GRPO&#xff08;Group Relative Policy Optimization&#xff09;常见面试题汇总篇 DeepSeek-R1 DeepSeek-R1-Zero 常见面试题汇总…

SSL/TLS

http ssl传输层 -> https 安全套接层 SSL/TLS 1、核心角色与文件2、证书生成流程2.1、生成CA根证书2.2、生成服务端证书2.3 生成客户端证书&#xff08;双向认证&#xff09; 3、SSL/TLS 认证模式3.1、单向认证&#xff08;默认 HTTPS&#xff09;3.2、双向认证&#xff0…

HTML 音频(Audio)学习笔记

一、HTML 音频概述 在 HTML 中&#xff0c;音频可以通过多种方式播放&#xff0c;但要确保音频在不同浏览器和设备上都能正常播放&#xff0c;需要掌握一些技巧。HTML5 引入了 <audio> 元素&#xff0c;为音频播放提供了一种标准方法&#xff0c;但在 HTML4 中&#xff…

php开发rest api,哪个框架最好

在 2025 年&#xff0c;选择适合开发 REST API 的 PHP 框架需要根据项目需求、性能要求和团队技术栈进行权衡。以下是一些推荐的 PHP 框架及其适用场景&#xff1a; 1. Laravel 特点&#xff1a;功能丰富&#xff0c;生态系统强大&#xff0c;内置 API 资源&#xff0c;支持 …

前端入门之CSS

CSS: HTML负责定义页面结构;JS负责处理页面逻辑和点击事件;CSS负责用于描述 HTML 元素的显示方式,通过 CSS 可以控制颜色、字体、布局等。 核心语法: 选择器: 类选择器主要用于选中需要添加样式的 HTML 元素。主要分为:类选择器(.class-name { ... })、标签选择器(…

MCP协议的Streamable HTTP:革新数据传输的未来

引言 在数字化时代&#xff0c;数据传输的效率和稳定性是推动技术进步的关键。MCP&#xff08;Model Context Protocol&#xff09;作为AI生态系统中的重要一环&#xff0c;通过引入Streamable HTTP传输机制&#xff0c;为数据交互带来了革命性的变化。本文将深入解读MCP协议的…

MySQL - 索引原理与优化:深入解析B+Tree与高效查询策略

文章目录 引言一、BTree索引核心原理1.1 索引数据结构演化1.2 BTree的存储结构通过主键查询&#xff08;主键索引&#xff09;商品数据的过程通过非主键&#xff08;辅助索引&#xff09;查询商品数据的过程 MySQL InnoDB 的索引原理 二、执行计划深度解析三、索引失效的六大陷…

《K230 从熟悉到...》识别机器码(AprilTag)

《K230 从熟悉到...》识别机器码&#xff08;aprirltag&#xff09; tag id 《庐山派 K230 从熟悉到...》 识别机器码&#xff08;AprilTag&#xff09; AprilTag是一种基于二维码的视觉标记系统&#xff0c;最早是由麻省理工学院&#xff08;MIT&#xff09;在2008年开发的。A…

Linux驱动复习

应用层调用内核层函数称为系统调用 1.硬件设备管理 1&#xff0c;字符设备驱动&#xff08;一个一个字节&#xff09;——芯片内部外设 &#xff1a;WDT,Timer&#xff0c;adc,iic&#xff0c;SPI,R,UART,LCD,CAMERA,USB,Keyboard&#xff0c;Mouse 2&#xff0c;块设备驱动&a…

【FAQ】HarmonyOS SDK 闭源开放能力 —Account Kit(3)

1.问题描述&#xff1a; PC场景&#xff0c;青少年模式系统API不支持吗&#xff1f; 解决方案&#xff1a; PC场景&#xff0c;青少年模式系统API不支持&#xff0c;另外文档上的几个API也不支持。 2.问题描述&#xff1a; 华为一键登录 Beta7本地运行到手机可以拿到匿名手…

【gdutthesis模板】论文标题太长导致换页问题解决

标题太长导致换页问题解决方案如下&#xff1a; 调小下方数值即可