【HarmonyOS开发】案例2:待办列表

ToDoListArkTS

介绍

本篇Codelab将介绍如何使用ArkTS声明式语法和基础组件,实现简易待办列表。效果为点击某一事项,替换标签图片、虚化文字。

相关概念

  • ArkTS语法:ArkTS是HarmonyOS的主要应用开发语言。ArkTS基于TypeScript(简称TS)语言扩展而来,是TS的超集。

  • Text组件:显示一段文本的组件。

  • Column组件:沿垂直方向布局的容器。

  • Row组件:沿水平方向布局的容器。

代码结构解读

对核心代码进行讲解,对于完整代码,会在gitee中提供。

├──entry/src/main/ets                   // 代码区
│  ├──common
│  │  └──constants
│  │     └──CommonConstants.ets         // 公共常量类
│  ├──entryability
│  │  └──EntryAbility.ts                // 程序入口类
│  ├──pages
│  │  └──ToDoListPage.ets               // 主页面
│  ├──view
│  │  └──ToDoItem.ets                   // 自定义单项待办组件
│  └──viewmodel
│     └──DataModel.ets                  // 列表数据获取文件
└──entry/src/main/resources            // 资源文件目录

构建主界面

将介绍应用主页面的实现,采用Column容器嵌套ForEach完成页面整体布局,页面分为两个部分:

  • 标题区:使用Text组件显示“待办”标题。

  • 数据列表:使用ForEach循环渲染自定义组件ToDoItem。

在工程pages目录中,选中Index.ets,点击鼠标右键 > Refactor > Rename,改名为ToDoListPage.ets。改名后,在工程entryability目录下,把EntryAbility.ts文件中windowStage.loadContent方法的第一个参数修改为pages/ToDoListPage。

// EntryAbility.ts
onWindowStageCreate(windowStage: Window.WindowStage) {
  ...
  windowStage.loadContent('pages/ToDoListPage', (err, data) => {
    ...
  });
}

选中工程的ets目录,点击鼠标右键 > new> Directory,新建view文件夹。选中新建的view文件夹,点击鼠标右键 > new> ArkTS File,新建ToDoItem.ets文件。后续在此文件中封装自定义组件。

在ToDoListPage.ets中导入封装的自定义组件ToDoItem,在aboutToAppear生命周期中初始化待办数据totalTasks,在build方法中编写主页面布局,使用Text文本组件显示标题,使用ForEach循环渲染自定义组件ToDoItem。

// ToDoListPage.ets
import ToDoItem'../view/ToDoItem';
...
@Entry
@Component
struct ToDoListPage {
  private totalTasks: Array<string> = [];
​
  aboutToAppear() {
    this.totalTasks = DataModel.getData();
  }
​
  build() {
    Column({ space: CommonConstants.COLUMN_SPACE }) {
      Text($r('app.string.page_title'))
        ...
      ForEach(this.totalTasks, (item: string) => {
        ToDoItem({ content: item })
      }, (item: string) => JSON.stringify(item))
    }
    ...
  }
}

自定义子组件

在ToDoItem.ets文件中,显示的文本内容为入参content,使用@State修饰参数isComplete来管理当前事项的完成状态。当点击当前ToDoItem时,触发Row组件的onClick事件,更新isComplete的值,isComplete的改变将会刷新使用该状态变量的UI组件。具体表现为:当前点击的ToDoItem中,labelIcon图片的替换、文本透明度opacity属性的变化、文本装饰线decoration的显隐。

// ToDoItem.ets
...
@Component
export default struct ToDoItem {
  private content?: string;
  @State isComplete: boolean = false;
  
 @Builder labelIcon(icon: Resource) {
    Image(icon)
      ...
  }
​
  build() {
    Row() {
      if (this.isComplete) {
        this.labelIcon($r('app.media.ic_ok'));
      } else {
        this.labelIcon($r('app.media.ic_default'));
      }
      Text(this.content)
        ...
        .opacity(this.isComplete ? CommonConstants.OPACITY_COMPLETED : CommonConstants.OPACITY_DEFAULT)
        .decoration({ type: this.isComplete ? TextDecorationType.LineThrough : TextDecorationType.None })
    }
    ...
    .onClick(() => {
      this.isComplete = !this.isComplete;
    })
  }
}

总结

了解到以下知识点:

  1. ArkTS声明式语法。

  2. Image、Text、Column、Row等基础组件的使用。

完整示例

gitee源码地址

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
HarmonyOS开发路线图是华为公司为构建智能生态系统所制定的战略规划。该路线图主要分为三个阶段。 第一阶段是2020年,目标是推出面向智能手机、平板电脑和智能穿戴设备的HarmonyOS 2.0版本。此版本将提供完整的开发工具和开发者文档,以促进开发者加快适配和迁移现有应用程序。华为计划首先在低端到中端市场推广HarmonyOS,逐步覆盖高端市场。此外,华为也计划与开发者和合作伙伴合作,共同推广和丰富HarmonyOS的应用生态系统。 第二阶段是2022年,华为计划在HarmonyOS的基础上推出全场景智能生态系统的HarmonyOS 3.0版本。该版本将支持更多设备类型,包括电视、汽车、家电和物联网设备。此外,华为还计划加强与开发者和合作伙伴的合作,共同推动HarmonyOS在各个行业的应用和发展。 第三阶段是2023年,华为将加强与全球开发者社区的合作,推出开放的HarmonyOS 4.0版本。该版本将进一步提升HarmonyOS的开放性和生态环境,鼓励更多开发者加入HarmonyOS的生态建设,共同推动技术创新和产业发展。 总体来说,HarmonyOS开发路线图注重渐进式发展,以逐步覆盖各个领域和设备类型,并通过与开发者和合作伙伴的紧密合作,共同推进HarmonyOS的应用和发展,构建全场景智能生态系统。在未来的几年里,HarmonyOS有望成为一个具有全球影响力的操作系统,为用户提供更流畅、开放和智能的使用体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值