当前位置: 首页 > news >正文

「Mac畅玩鸿蒙与硬件53」UI互动应用篇30 - 打卡提醒小应用

本篇教程将实现一个打卡提醒小应用,通过用户输入时间进行提醒设置,并展示实时提醒状态,实现提醒设置和取消等功能。

在这里插入图片描述


关键词
  • 打卡提醒
  • 状态管理
  • 定时任务
  • 输入校验
  • UI交互

一、功能说明

打卡提醒小应用包含以下功能:

  1. 提醒时间输入与设置:支持输入格式化时间并进行提醒设置。
  2. 提醒触发与状态提示:在设定时间到达时触发提醒通知。
  3. 取消提醒:支持用户取消已设置的提醒。
  4. 图片装饰:通过图片展示提升界面趣味性。

二、所需组件
  • @Entry@Component 装饰器
  • TextInputButton 组件用于用户输入和操作
  • Text 组件用于展示提醒状态
  • Image 组件用于装饰界面
  • @State 修饰符用于状态管理

三、项目结构
  • 项目名称ClockReminderApp
  • 自定义组件名称ReminderPage
  • 代码文件ReminderPage.etsIndex.ets

四、代码实现
1. 打卡提醒页面代码
// 文件名:ReminderPage.ets@Component
export struct ReminderPage {@State reminderTime: string = ''; // 提醒时间输入@State reminderStatus: string = '未设置提醒'; // 提醒状态private timerId: number | null = null; // 定时器ID// 设置提醒setReminder(): void {if (!this.reminderTime.includes(':')) {this.reminderStatus = '请输入正确格式的时间 (HH:mm)';return;}const timeParts = this.reminderTime.split(':');if (timeParts.length !== 2) {this.reminderStatus = '时间格式错误,请使用 HH:mm 格式';return;}const hours = parseInt(timeParts[0], 10);const minutes = parseInt(timeParts[1], 10);if (isNaN(hours) || isNaN(minutes) || hours < 0 || hours >= 24 || minutes < 0 || minutes >= 60) {this.reminderStatus = '时间值不合法,请检查输入';return;}const now = new Date();const targetTime = new Date();targetTime.setHours(hours, minutes, 0, 0);const delay = targetTime.getTime() - now.getTime();if (delay <= 0) {this.reminderStatus = '提醒时间已过,请设置未来时间';return;}this.reminderStatus = `提醒已设置,时间:${this.reminderTime}`;this.timerId = setTimeout(() => {this.showNotification();}, delay);}// 提醒触发showNotification(): void {this.reminderStatus = '时间到!请打卡';}// 取消提醒cancelReminder(): void {if (this.timerId !== null) {clearTimeout(this.timerId);this.timerId = null;}this.reminderStatus = '提醒已取消';}build(): void {Column({ space: 20 }) {Text('打卡提醒小应用').fontSize(24).fontWeight(FontWeight.Bold).alignSelf(ItemAlign.Center);// 输入提醒时间Row({ space: 10 }) {TextInput({placeholder: '请输入提醒时间 (HH:mm)',text: this.reminderTime,}).width(200).onChange((value: string) => (this.reminderTime = value));Button('设置提醒').onClick(() => this.setReminder()).width(120).height(40);Button('取消提醒').onClick(() => this.cancelReminder()).width(120).height(40);}.alignSelf(ItemAlign.Center);// 提醒状态展示Text(`当前状态:${this.reminderStatus}`).fontSize(18).margin({ top: 20 });// 添加图片装饰Image($r('app.media.cat')).width(305).height(360).alignSelf(ItemAlign.Center);}.padding(20).width('100%').height('100%');}
}

2. 主入口文件
// 文件名:Index.etsimport { ReminderPage } from './ReminderPage';@Entry
@Component
struct Index {build() {Column() {ReminderPage() // 调用提醒页面}.padding(20);}
}

效果示例:用户可以输入提醒时间,并在设定时间到达时收到提醒通知。

效果展示
在这里插入图片描述


五、代码解读
  1. 时间输入校验与解析

    • 提醒时间通过 TextInput 输入,并使用 split 拆分成小时和分钟,通过 parseInt 分别解析为整数。
  2. 状态更新与定时任务

    • 使用 setTimeout 设置定时任务,到达提醒时间时更新状态提示用户打卡。
  3. 取消提醒功能

    • 提供“取消提醒”按钮,通过 clearTimeout 取消定时任务,并更新提醒状态。
  4. 图片装饰

    • 使用 Image 组件展示 cat.png 图片,提升界面趣味性和视觉效果。

六、优化建议
  1. 添加周期性提醒功能,例如每日固定时间提醒。
  2. 增加提醒提示音,增强提醒效果。
  3. 提供提醒历史记录,便于用户查看过往提醒信息。

七、效果展示
  • 提醒设置与取消:用户可输入提醒时间并取消提醒。
  • 状态更新:界面实时更新提醒状态并提供反馈。
  • 图片装饰:增加趣味性装饰图片,提升界面交互体验。

八、相关知识点
  • 「Mac畅玩鸿蒙与硬件13」鸿蒙UI组件篇3 - TextInput组件获取用户输入
  • 「Mac畅玩鸿蒙与硬件11」鸿蒙UI组件篇1 - Text和Button组件详解

小结

本篇教程展示了如何使用状态管理和定时任务,实现一个简单的打卡提醒小应用,学习了输入校验、界面状态更新和用户交互的基本开发方法。


下一篇预告

在下一篇「UI互动应用篇31 - 滑动解锁屏幕功能」中,将实现滑动解锁功能,通过滑动操作实现屏幕解锁的交互效果。


上一篇: 「Mac畅玩鸿蒙与硬件52」UI互动应用篇29 - 模拟火车票查询系统
下一篇: 「Mac畅玩鸿蒙与硬件54」UI互动应用篇31 - 滑动解锁屏幕功能

作者:SoraLuna
链接:https://www.nutpi.net/thread?topicId=667
來源:坚果派
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


相关文章:

「Mac畅玩鸿蒙与硬件53」UI互动应用篇30 - 打卡提醒小应用

本篇教程将实现一个打卡提醒小应用&#xff0c;通过用户输入时间进行提醒设置&#xff0c;并展示实时提醒状态&#xff0c;实现提醒设置和取消等功能。 关键词 打卡提醒状态管理定时任务输入校验UI交互 一、功能说明 打卡提醒小应用包含以下功能&#xff1a; 提醒时间输入与…...

基于单片机洗衣机控制器的设计(论文+源码)

1需求分析 在智能洗衣机系统设计中&#xff0c;考虑到洗衣机在实际应用过程中&#xff0c;需要满足用户对于不同衣物清洁、消毒的应用要求&#xff0c;对设计功能进行分析&#xff0c;具体如下&#xff1a; 通过按键实现洗衣机不同工作模式的切换&#xff0c;包括标准模式&…...

【Git系列】解析与解决Git错误:RPC失败;curl 56 OpenSSL SSL_read: error:140943FC

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

[Unity Shader] 【游戏开发】Unity基础光照1-光照模型原理

在计算机图形学中,渲染是一个复杂的过程,包含了两个主要部分:决定一个像素的可见性和计算该像素的光照。其中,光照模型是渲染过程中的核心部分,它模拟了真实世界中的光与物体表面的交互,帮助生成最终的图像。在Unity等游戏引擎中,理解光照模型的原理是创建真实感视觉效果…...

基于Python 的宠物管理系统(源码+部署)

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…...

console.log封装

console.log封装 在控制台中打印带有颜色和格式的日志信息。 /*** 检查给定的对象是否为数组*/ const isArray function (obj: any): boolean {return Object.prototype.toString.call(obj) [object Array] }/*** Logger 构造函数*/ Logger () > {}/*** 根据日志类型返回…...

戴尔/Dell 电脑按什么快捷键可以进入 Bios 设置界面?

BIOS&#xff08;基本输入输出系统&#xff09;是计算机硬件与操作系统之间的桥梁&#xff0c;它负责初始化和测试系统硬件组件&#xff0c;并加载启动操作系统。在某些情况下&#xff0c;如调整启动顺序、更改系统时间或日期、修改硬件配置等&#xff0c;您可能需要进入BIOS进…...

GitLab创建用户,设置访问SSH Key

继上一篇 Linux Red Hat 7.9 Server安装GitLab-CSDN博客 安装好gitlab&#xff0c;启用管理员root账号后&#xff0c;开始创建用户账户 1、创建用户账户 进入管理后台页面 点击 New User 输入用户名、邮箱等必填信息和登录密码 密码最小的8位&#xff0c;不然会不通过 拉到…...

Mysql--基础篇--SQL(DDL,DML,窗口函数,CET,视图,存储过程,触发器等)

SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是用于管理和操作关系型数据库的标准语言。它允许用户定义、查询、更新和管理数据库中的数据。SQL是一种声明性语言&#xff0c;用户只需要指定想要执行的操作&#xff0c;而不需要详细说明如何…...

比较 FreeSWITCH 的 asr 事件和回调函数

用 lua 来描述&#xff0c;是这样的 第一种做法&#xff1a; session:setVariable("fire_asr_events", "true") session:execute("detect_speech", "start-input-timers") 识别到结果之后可以收到 DETECTED_SPEECH 事件 另外一个做法…...

基于ffmpeg和sdl2的简单视频播放器制作

基于ffmpeg和sdl2的简单视频播放器制作 前言一、视频播放器开发的基础1.1 视频播放原理1.2 开发所需的库 二、FFmpeg库详解2.1 FFmpeg库的组成2.2 关键数据结构2.3 打开视频文件并获取流信息2.4 查找视频流和解码器2.5 初始化解码器 三、SDL库详解3.1 SDL库的功能3.2 初始化SDL…...

卫星导航信号的形成及解算

引言 卫星导航信号是现代导航技术的核心&#xff0c;它利用卫星发射的信号实现全球范围内的精确定位和导航。本文将详细介绍卫星导航信号的形成及解算过程。 一、卫星导航信号的形成 卫星导航信号的形成主要包括信号的生成、调制和传播三个步骤。 1. 信号的生成 卫星导航信号主…...

硬件-射频-PCB-常见天线分类-ESP32实例

文章目录 一&#xff1a;常见天线1.1 PCB天线①蓝牙模块的蛇形走线-天线②倒F天线-IFA&#xff1a;③蛇形倒F天线-MIFA④立体的倒F天线-PIFA 1.2 实例示意图1.21 对数周期天线(LPDA):1.22 2.4GHZ的八木天线&#xff1a;1.23 陶瓷天线&#xff1a;1.24 外接天线&#xff1a; 二&…...

salesforce 验证规则判断一个picklist是否为none

在 Salesforce 验证规则中&#xff0c;如果你想判断一个 Picklist 字段是否等于 None&#xff0c;可以使用 ISPICKVAL 函数。 以下是具体的公式&#xff1a; ISPICKVAL(Picklist_Field__c, "None")示例解释&#xff1a; Picklist_Field__c: 是你的自定义 Picklist…...

解决 IntelliJ IDEA 中 Tomcat 日志乱码问题的详细指南

目录 前言1. 分析问题原因2. 解决方案 2.1 修改 IntelliJ IDEA 的 JVM 选项2.2 配置 Tomcat 实例的 VM 选项 2.2.1 设置 Tomcat 的 VM 选项2.2.2 添加环境变量 3. 进一步优化 3.1 修改 Tomcat 的 logging.properties3.2 修改操作系统默认编码 3.2.1 Windows 系统3.2.2 Linux …...

如何分析 Nginx 日志

分析 Nginx 日志可以帮助我们了解服务器性能、流量来源、用户行为&#xff0c;以及诊断问题&#xff08;如错误和攻击&#xff09;。以下是详细的分析方法&#xff1a; 1. 日志类型 Nginx 有两种主要日志&#xff1a; 访问日志 (Access Log)&#xff1a;记录客户端对服务器的…...

Kubernetes Gateway API-5-后端协议和网关基础设置标签

1 后端协议 自 v1.2.0 开始支持 并非所有网关API实现都支持自动协议选择。在某些情况下&#xff0c;协议在没有明确选择加入的情况下被禁用。 当 Route 的后端引用Kubernetes Service 时&#xff0c;应用程序开发人员可以使用 ServicePort appProtocol 字段指定协议。 例如…...

大数据架构演变

一、离线数仓 缺点&#xff1a; ETL计算、存储、时间成本高数据处理链路过长无法支持实时、近实时的数据分析数据采集对业务库造成影响 二、Lambda架构&#xff0c;离线实时分开 缺点&#xff1a; 组件多&#xff0c;不方便管理很难保证数据一致数据探查困难&#xff0c;出现…...

Bash语言的软件工程

Bash语言的软件工程 1. 引言 Bash&#xff08;Bourne Again SHell&#xff09;是一个Unix Shell和命令语言解释器&#xff0c;最初由Brian Fox为GNU项目编写。Bash不仅是Linux和macOS等现代操作系统的标准Shell&#xff0c;同时也是很多开发者和系统管理员进行自动化任务、开…...

OpenGL —— 流媒体播放器 - ffmpeg解码rtsp流,opengl渲染yuv视频(附源码,glfw+glad)

效果 说明 FFMpeg和OpenGL作为两大技术巨头,分别在视频解码和图形渲染领域发挥着举足轻重的作用。本文将综合两者实战视频播放器,大概技术流程为:ffmpeg拉取rtsp协议视频流,并经过解码、尺寸格式转换为yuv420p后,使用opengl逐帧循环渲染该yuv实时视频。 核心源码 vertexSh…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

多元隐函数 偏导公式

我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式&#xff0c;给定一个隐函数关系&#xff1a; F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 &#x1f9e0; 目标&#xff1a; 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z​、 …...

PH热榜 | 2025-06-08

1. Thiings 标语&#xff1a;一套超过1900个免费AI生成的3D图标集合 介绍&#xff1a;Thiings是一个不断扩展的免费AI生成3D图标库&#xff0c;目前已有超过1900个图标。你可以按照主题浏览&#xff0c;生成自己的图标&#xff0c;或者下载整个图标集。所有图标都可以在个人或…...