HarmonyOS6 - 鸿蒙ArkTS待办清单实战案例

HarmonyOS6 - 鸿蒙ArkTS待办清单实战案例

1. 效果图

列出待办事项,前面有一个是否完成的图标标识当前事项是否已完成,如果已完成则为勾选状态切文字灰色展示带有删除线,如果为未完成状态,则为未勾选状态,文字是黑色显示无删除线

2. 代码

js 复制代码
class ToDoModel {
  index: number;
  content: string;

  constructor(index: number, content: string) {
    this.index = index;
    this.content = content;
  }
}

/**
 * Author: 波波老师(vx:javabobo0513)
 * Desc: 待办列表
 */
@Entry
@Component
struct ToDoListPage {
  @State message: string = '待办列表';
  //待办事项数据集合
  @State dataList: Array<ToDoModel> = [
    new ToDoModel(1, '取快递'),
    new ToDoModel(2, '健身'),
    new ToDoModel(3, '图书馆还书'),
    new ToDoModel(4, '小米4S店提车'),
    new ToDoModel(5, '办理交房手续'),
  ]

  build() {
    Column() {
      Text(this.message)
        .fontSize(50)
        .fontWeight(FontWeight.Bold)

      ForEach(this.dataList, (item: ToDoModel) => {
        ToDoItem({ content: item.content })
      }, (item: ToDoModel) => JSON.stringify(item))
    }
    .width('100%')
    .height('100%')
    .backgroundColor('#ffffff') // 页面背景颜色
  }
}


@Component
struct ToDoItem {
  private content?: string; //具体的待办项的内容
  @State isComplete: boolean = false; //是否完成

  build() {
    Row() {
      //if条件渲染,替换图标效果
      if (this.isComplete) {
        this.labelIcon($r('app.media.ic_ok'));
      } else {
        this.labelIcon($r('app.media.ic_default'));
      }
      //每一条待办事项,通过opacity属性设置虚化效果,decoration属性设置删除线效果
      Text(this.content)
        .fontSize('20fp')
        .fontWeight(500)
        .opacity(this.isComplete ? 0.4 : 1)
        .decoration({ type: this.isComplete ? TextDecorationType.LineThrough : TextDecorationType.None })
    }
    .borderRadius(24)
    .backgroundColor('#ffffff')
    .width('95%')
    .height('64vp')
    .onClick(() => {
      this.isComplete = !this.isComplete;
    })
  }

  //抽离"是否完成按钮"的子组件,方便复用
  @Builder
  labelIcon(icon: Resource) {
    Image(icon)
      .width('28vp')
      .height('28vp')
      .margin('20vp')
  }
}
相关推荐
2501_9437823512 小时前
【共创季稿事节】摇骰子:用 ArkTS 实现随机动画与交互反馈
运维·nginx·交互·harmonyos·鸿蒙·鸿蒙系统
2501_9437823516 小时前
【共创季稿事节】猜数字游戏:二分法思维与交互式反馈
前端·游戏·microsoft·harmonyos·鸿蒙·鸿蒙系统
想你依然心痛16 小时前
AtomCode 在 HarmonyOS 开发环境中的表现测评
跨平台·harmonyos·arkts·信创·国产系统
2501_9437823517 小时前
【共创季稿事节】 倒计时器:时分秒选择器与定时器的协同工作
前端·华为·harmonyos·鸿蒙·鸿蒙系统
2501_9437823520 小时前
【共创季稿事节】摩斯电码转换器:编码表与双向转换的实现
android·华为·鸿蒙·鸿蒙系统
yy40331 天前
【HarmonyOS学习笔记】2026-07-04 | Tabs 切换:点击流畅但滑动延迟
arkts
duluo1331 天前
鸿蒙NEXT实战:从零构建高尔夫挥杆教学App(API 24 / ArkTS 深度解析)
华为·harmonyos·鸿蒙·鸿蒙系统
TrisighT4 天前
我用 AI 逆向了 ArkTS @Builder 的编译产物,看完再也不敢乱写嵌套了
ai编程·harmonyos·arkts
看谷秀6 天前
鸿蒙-part3-arkts下
arkts
TrisighT6 天前
ArkTS 的 @BuilderParam 你八成只用了皮毛——那个尾随闭包写法差点被我当 bug 删了
harmonyos·arkts·arkui