鸿蒙ArkTS开发实战:从零打造高可用待办事项App【QuickTodo】

随着鸿蒙生态的迅速发展,越来越多的开发者开始关注鸿蒙设备的应用开发。在这一背景下,ArkTS成为鸿蒙应用开发的首选语言,其声明式UI、强类型校验以及跨设备适配能力,使得开发者能够以更高效、更可靠的方式构建应用。本文将以一个**待办事项App(QuickTodo)**为例,从零开始讲解ArkTS开发全流程,包括环境搭建、项目初始化、UI构建、状态管理、事件处理以及数据持久化与性能优化策略,带你全面理解鸿蒙ArkTS开发的核心理念与实践技巧。
在这里插入图片描述


一、开发前准备:环境搭建与工具配置

在这里插入图片描述

1.1 安装DevEco Studio

鸿蒙官方推荐的开发IDE是DevEco Studio,基于IntelliJ IDEA开发,提供从代码编辑到模拟器调试的完整工具链。使用官方IDE可保证ArkTS特性得到充分支持。

  1. 下载地址:鸿蒙开发者官网

  2. 安装步骤:

    • 运行安装包,按提示完成安装。
    • 配置完成后,可创建快捷方式方便后续使用。

安装示意图如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2 模拟器与真机调试配置

开发完成后,需要通过模拟器或真机进行调试:

  • 模拟器配置

    1. 打开DevEco Studio → Tools → Device Manager。
    2. 点击 New Device,选择鸿蒙版本、设备类型、分辨率等。
    3. 启动模拟器。
  • 真机调试

    1. 开启手机的开发者模式及USB调试。
    2. 通过USB连接设备,DevEco Studio会自动识别。

示意图如下:

在这里插入图片描述
在这里插入图片描述


二、项目初始化:创建ArkTS应用

2.1 创建项目

  1. 启动DevEco Studio → Create Project → Application → Empty Ability → Next。

  2. 配置项目信息:

    • Project Name:TodoApp
    • Package Name:com.example.todoapp
    • Language:ArkTS
    • Ability Template:Empty Ability
  3. 点击 Finish,DevEco Studio会自动生成项目结构。

2.2 项目结构解析

初始化后的项目目录如下:

TodoApp/
├── entry/
│   ├── src/
│   │   ├── main/
│   │   │   ├── arkts/
│   │   │   │   ├── entryability/  // 应用入口
│   │   │   │   │   └── EntryAbility.ets
│   │   │   │   ├── pages/
│   │   │   │   │   └── Index.ets   // 首页待办功能
│   │   │   │   └── app.ets          // 应用全局配置
│   │   │   ├── main_pages.json      // 页面路由
│   │   │   └── module.json5         // 模块配置(权限、名称等)
│   └── build.gradle
└── build.gradle

项目结构清晰,入口Ability负责生命周期管理,页面目录存放应用功能页面,app.ets则用于全局配置和状态初始化。

在这里插入图片描述


三、核心功能实现:待办事项App

我们的目标是实现一个基础但高可用的待办事项App,功能包括:

  1. 新增待办事项
  2. 展示待办列表
  3. 完成/未完成状态切换
  4. 删除待办事项

3.1 数据模型设计

在ArkTS中,强类型数据模型可以确保数据操作安全可靠。创建 model/TodoModel.ets

export interface TodoItem {
  id: number;
  content: string;
  completed: boolean;
  createTime: number;
}

export class TodoModel {
  private todoList: TodoItem[] = [];
  private nextId: number = 1;

  addTodo(content: string): void {
    const todo: TodoItem = {
      id: this.nextId++,
      content,
      completed: false,
      createTime: Date.now()
    };
    this.todoList.push(todo);
  }

  getTodoList(): TodoItem[] {
    return this.todoList;
  }

  toggleTodo(id: number): void {
    const index = this.todoList.findIndex(item => item.id === id);
    if (index !== -1) this.todoList[index].completed = !this.todoList[index].completed;
  }

  deleteTodo(id: number): void {
    const index = this.todoList.findIndex(item => item.id === id);
    if (index !== -1) this.todoList.splice(index, 1);
  }
}
  • TodoItem接口:确保每条待办数据结构一致。
  • TodoModel类:封装数据操作逻辑,实现增删改查,保证业务逻辑与UI解耦。

在这里插入图片描述


3.2 页面UI构建

Index.ets 中实现页面布局:

import { TodoModel, TodoItem } from '../model/TodoModel';

@Entry
@Component
struct Index {
  private todoModel: TodoModel = new TodoModel();
  @State todoList: TodoItem[] = [];
  @State inputContent: string = '';

  onPageShow() { this.updateTodoList(); }

  updateTodoList() { this.todoList = this.todoModel.getTodoList(); }

  addTodo() {
    if (!this.inputContent.trim()) return;
    this.todoModel.addTodo(this.inputContent);
    this.inputContent = '';
    this.updateTodoList();
  }

  toggleTodo(id: number) { this.todoModel.toggleTodo(id); this.updateTodoList(); }

  deleteTodo(id: number) { this.todoModel.deleteTodo(id); this.updateTodoList(); }

  build() {
    Column({ space: 20 }) {
      Text('待办事项')
        .fontSize(32)
        .fontWeight(FontWeight.Bold)
        .margin({ top: 40 })

      Row({ space: 10 }) {
        Button('添加')
          .width('25%')
          .height(50)
          .backgroundColor(Color.Blue)
          .fontColor(Color.White)
          .borderRadius(10)
          .onClick(() => { this.addTodo(); })
      }

      List({ space: 15 }) {
        ForEach(this.todoList, (item: TodoItem) => {
          ListItem() {
            Row({ space: 10 }) {
              Checkbox().onChange(() => this.toggleTodo(item.id))
              Text(item.content)
                .width('70%')
                .fontSize(18)
                .fontColor(item.completed ? Color.Gray : Color.Black)
              Button('删除')
                .width('20%')
                .height(40)
                .backgroundColor(Color.Red)
                .fontColor(Color.White)
                .borderRadius(8)
                .onClick(() => this.deleteTodo(item.id))
            }
            .padding(15)
            .backgroundColor(Color.White)
            .borderRadius(12)
            .shadow({ radius: 4, color: '#00000020', offsetX: 0, offsetY: 2 })
          }
        })
      }
      .width('100%')
    }
    .width('100%')
    .height('100%')
    .backgroundColor('#F5F5F5')
  }
}

在这里插入图片描述

核心技术解析
  1. 声明式UI:ArkTS采用声明式UI,组件化+链式属性赋值,使界面代码清晰直观。

  2. 状态管理(@State)

    • @State todoList:绑定UI,自动刷新列表。
    • @State inputContent:实时绑定输入框内容。
  3. 事件绑定

    • Button.onClick → 添加/删除待办。
    • Checkbox.onChange → 切换完成状态。
  4. 列表渲染(ForEach):通过 id 唯一标识实现高效渲染。


四、调试与运行

  1. 启动模拟器或连接真机。

  2. 点击 Run 编译运行。

  3. 功能测试:

    • 新增待办
    • 勾选完成/未完成
    • 删除待办

调试中可通过 Logcat 查看运行日志,快速定位问题。

在这里插入图片描述


五、功能扩展与优化策略

  1. 数据持久化

    • 当前存储在内存中,重启后丢失。
    • 可使用 PreferencesRelationalStore实现持久化。
  2. 任务分类

    • 按工作、学习、生活分类,提高任务管理效率。
  3. 搜索与筛选

    • 支持关键词搜索和状态筛选。
  4. UI优化

    • 提示信息(Toast)、滑动删除、下拉刷新。
  5. 跨设备适配

    • 利用鸿蒙自适应布局和媒体查询实现手机、平板多端适配。
  6. 性能优化

    • 列表渲染使用 ForEach 的唯一标识。
    • 数据模型与UI解耦,减少重复刷新。

在这里插入图片描述


六、总结与开发心得

通过本项目,我们完整体验了鸿蒙ArkTS应用开发流程

  • 环境搭建与调试:熟悉DevEco Studio及模拟器/真机调试。
  • 项目初始化与结构理解:掌握Ability、页面、模块配置等概念。
  • 声明式UI与组件化开发:理解Column、Row、List、Text、Button等组件组合方式。
  • 状态管理与事件处理:掌握@State及事件回调,实现动态交互。
  • 数据模型与业务逻辑分离:提高代码可维护性。
  • 扩展与优化思路:持久化、分类、跨设备适配、性能优化。

ArkTS让鸿蒙应用开发更简洁高效,其声明式UI强类型系统不仅提升开发效率,也降低了后期维护难度。对于初学者,建议先掌握基础组件、状态管理和事件处理,再逐步探索跨组件通信、数据持久化和多设备适配等高级特性。

通过本实战项目,你不仅完成了一个可用的待办事项App,还对鸿蒙ArkTS开发理念有了深入理解,为后续构建更复杂的鸿蒙应用打下坚实基础。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐