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

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

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

20250103_203702.gif


关键词
  • 打卡提醒
  • 状态管理
  • 定时任务
  • 输入校验
  • 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%');
  }
}
AI 代码解读

2. 主入口文件
// 文件名:Index.ets

import {
    ReminderPage } from './ReminderPage';

@Entry
@Component
struct Index {
   
  build() {
   
    Column() {
   
      ReminderPage() // 调用提醒页面
    }
    .padding(20);
  }
}
AI 代码解读

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

效果展示
20250103_203702.gif


五、代码解读

  1. 时间输入校验与解析

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

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

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

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

六、优化建议

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

七、效果展示

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

八、相关知识点


小结

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


下一篇预告

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


上一篇: 「Mac畅玩鸿蒙与硬件52」UI互动应用篇29 - 模拟火车票查询系统

下一篇: 「Mac畅玩鸿蒙与硬件54」UI互动应用篇31 - 滑动解锁屏幕功能


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


目录
打赏
0
10
10
1
151
分享
相关文章
|
2月前
|
HarmonyOS NEXT - Stage模型和应用/组件级配置
HarmonyOS 的 Stage 模型从 API 9 开始引入,是当前主推的应用模型。它通过 AbilityStage 和 WindowStage 等类为应用组件和窗口提供“舞台”。UIAbility 是包含用户界面的应用组件,用于与用户交互。 配置文件中,`AppScope/app.json5` 定义应用级图标和标签,而 `module.json5` 配置入口图标和标签。若配置了入口图标和标签,则会覆盖应用图标和标签,且未配置入口图标和标签会导致报错。JSON5 文件还定义了模块类型、设备支持、页面及能力(如 EntryAbility 和扩展能力 EntryBackupAbility)。
80 10
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
225 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【01】优雅草星云物联网AI智控系统从0开发鸿蒙端适配完成流程-初始化鸿蒙编译器deveco studio项目结构-UI设计图切片下载-优雅草卓伊凡
【01】优雅草星云物联网AI智控系统从0开发鸿蒙端适配完成流程-初始化鸿蒙编译器deveco studio项目结构-UI设计图切片下载-优雅草卓伊凡
51 11
【01】优雅草星云物联网AI智控系统从0开发鸿蒙端适配完成流程-初始化鸿蒙编译器deveco studio项目结构-UI设计图切片下载-优雅草卓伊凡
HarmonyOS Next~鸿蒙应用框架开发实战:Ability Kit与Accessibility Kit深度解析
本书深入解析HarmonyOS应用框架开发,聚焦Ability Kit与Accessibility Kit两大核心组件。Ability Kit通过FA/PA双引擎架构实现跨设备协同,支持分布式能力开发;Accessibility Kit提供无障碍服务构建方案,优化用户体验。内容涵盖设计理念、实践案例、调试优化及未来演进方向,助力开发者打造高效、包容的分布式应用,体现HarmonyOS生态价值。
100 27
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
87 10
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
HarmonyOS ArkTS声明式UI开发实战教程
本文深入探讨了ArkTS作为HarmonyOS生态中新一代声明式UI开发框架的优势与应用。首先对比了声明式与命令式开发的区别,展示了ArkTS如何通过直观高效的代码提升可维护性。接着分析了其核心三要素:数据驱动、组件化和状态管理,并通过具体案例解析布局体系、交互组件开发技巧及复杂状态管理方案。最后,通过构建完整TODO应用实战,结合调试优化指南,帮助开发者掌握声明式UI设计精髓,感受ArkTS的独特魅力。文章鼓励读者通过“破坏性实验”建立声明式编程思维,共同推动HarmonyOS生态发展。
111 3
HarmonyOS NEXT 实战系列07-应用状态
AppStorage 是应用全局的 UI 状态存储,支持跨 Ability 数据共享,提供 `setOrCreate` 和 `get` 方法管理全局状态,并通过 `@StorageProp` 和 `@StorageLink` 实现单向或双向数据同步至组件。PersistentStorage 基于 AppStorage,提供状态变量的持久化能力,可将选定属性保存到设备磁盘,但写操作同步执行,建议持久化数据小于 2KB,以避免影响 UI 渲染性能。相关持久化文件位于 `/data/app/el2/.../persistent_storage` 目录下。
用自然语言控制电脑,字节跳动开源 UI-TARS 的桌面版应用!内附详细的安装和配置教程
UI-TARS Desktop 是一款基于视觉语言模型的 GUI 代理应用,支持通过自然语言控制电脑操作,提供跨平台支持、实时反馈和精准的鼠标键盘控制。
1845 17
用自然语言控制电脑,字节跳动开源 UI-TARS 的桌面版应用!内附详细的安装和配置教程
解锁鸿蒙装饰器:应用、原理与优势全解析
ArkTS提供了多维度的状态管理机制。在UI开发框架中,与UI相关联的数据可以在组件内使用,也可以在不同组件层级间传递,比如父子组件之间、爷孙组件之间,还可以在应用全局范围内传递或跨设备传递。
85 2
Harmony os next~UI开发与ArkUI框架
鸿蒙OS的UI开发基于ArkUI框架,采用声明式编程,简化开发流程。五大核心组件(Text、Button、List、Grid、Flex)助力高效布局,支持数据绑定与动态更新。事件响应机制灵敏,适合构建交互丰富的应用。实战技巧包括规范命名、样式复用和调试方法。掌握这些,轻松开发鸿蒙应用。下期预告:分布式开发,记得带上烤冷面!
81 0

物联网

+关注