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

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(九)

课程地址: 黑马程序员HarmonyOS4+NEXT星河版入门到企业级实战教程,一套精通鸿蒙应用开发

(本篇笔记对应课程第 16 节)

P16《15.ArkUI-状态管理-任务统计案例》

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1、实现任务进度卡片

在这里插入图片描述

怎么让进度条和进度展示文本堆叠展示?需要一个新的布局容器:Stack

在这里插入图片描述

在这里插入图片描述

2、实现新增任务按钮

在这里插入图片描述

3、实现任务列表渲染:

在这里插入图片描述

在这里插入图片描述

将更新任务总数量与已完成数量的逻辑封装为一个方法,在新增任务与勾选/取消勾选时都调用这个方法:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4、实现左滑显示删除按钮功能:

首先用 List 与 ListItem 改善任务列表:
在这里插入图片描述

**要实现左滑显示删除按钮功能,需要 ListItem 的属性 swipeAction 实现:其对应的参数是一个自定义构建函数。**强烈建议这个自定义构建函数定义为局部的,因为删除某一个任务时需要操作任务数组:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

实践:


class Task {static id:number = 1// 任务名称name:string = `任务${Task.id++}`// 任务状态:是否完成finished:boolean = false
}@Styles function cardStyle(){.width('100%').height(120).padding(10).backgroundColor('#fff').borderRadius(8)
}@Entry
@Component
struct Index {// 总任务数量@State totalTask:number = 0// 已完成任务数量@State finishTask:number = 0// 任务列表@State tasks:Task[] = []handleTaskChange(){// 更新任务总数量this.totalTask = this.tasks.length// 更新已完成任务数量this.finishTask = this.tasks.filter(item => item.finished).length}build() {Row() {Column() {// 1、任务进度卡片Row(){Text('任务进度:').fontSize(22).fontWeight(FontWeight.Bold)Stack(){Progress({value : this.finishTask,total : this.totalTask,type : ProgressType.Ring})Row(){Text(this.finishTask.toString())Text(`/${this.totalTask.toString()}`)}}}.cardStyle().justifyContent(FlexAlign.SpaceEvenly)// 2、新增任务按钮Button('新增任务').width(200).margin({top:20, bottom:20}).onClick(()=>{// 新增任务this.tasks.push(new Task())// 更新任务总数量// this.totalTask = this.tasks.lengththis.handleTaskChange()})// 3、任务列表展示List(){ForEach(this.tasks,(item:Task,index)=>{ListItem(){Row(){Text(item.name)Checkbox().select(item.finished).onChange(val => {// 更新任务状态item.finished = val// 更新已完成任务数量// this.finishTask = this.tasks.filter(item => item.finished).lengththis.handleTaskChange()})}.cardStyle().height(60).margin({bottom:10}).justifyContent(FlexAlign.SpaceBetween)}.swipeAction({ end: this.deleteBtn(index)})})}.layoutWeight(1)}.width('100%').height('100%').justifyContent(FlexAlign.Start)}.height('100%').width('100%').padding({top:20,bottom :20, left:10,right:10}).backgroundColor('#efefef')}@Builder deleteBtn(index){Button(){Image($r('app.media.icon_delete')).width(30).fillColor(Color.Red)}.width(40).height(40).type(ButtonType.Circle).backgroundColor(Color.Red).margin(6).onClick(() => {this.tasks.splice(index,1)this.handleTaskChange()})}
}
http://www.lryc.cn/news/350714.html

相关文章:

  • 海山数据库(He3DB)数据仓库发展历史与架构演进:(一)传统数仓
  • 简单快捷的图片格式转换工具:认识webp2jpg-online
  • iptablese防火墙【SNAT和DNAT】
  • IT行业现状与未来趋势
  • Snowy2.x 版本使用 Yaml
  • 鸿蒙 DevEcoStudio:通知栏通知实现
  • 什么是网关鉴权及其在Spring Cloud Gateway中的实现
  • 【机器学习与实现】支持向量机SVM
  • 当代人工智能三教父——深度学习三巨头
  • Django项目从创建到开发以及数据库连接的主要步骤,精简实用
  • linux 命令 grep 排除 No such file or directory
  • Unity 滑动条(Slider)拖拽开始和结束、点击等事件的拓展功能
  • Linux 学习知识 (简单易懂 )持续更新 Linux输出重定向 Linux通配符 Linux正则表达式 持续更新....
  • 前端vue用el-table如何实现表头内容过长换行处理,实现换行效果
  • 15:00面试,15:08出来,面试问的有点变态。。。。
  • 【BUG】流式响应requests得到: ping - 和时间戳
  • 人工智能应用-实验5-BP 神经网络分类手写数据集
  • K8s Pod 资源进阶
  • 掌握Edge浏览器的使用技巧
  • Qt封装ping命令并将ping结果显示到界面
  • 图论(洛谷刷题)
  • 安卓部署ffmpeg全平台so并实现命令行调用
  • Go语言中MD5盐值加密解决用户密码问题
  • flutter开发实战-本地SQLite数据存储
  • 【路由組件】
  • 【C++风云录】数字逻辑设计优化:电子设计自动化与集成电路
  • Flask Response 对象
  • 算法001:移动零
  • 基于springboot+vue+Mysql的网上书城管理系统
  • python实现绘制烟花代码