ArkTS 任务统计页面

我们继续学习使用ArkTS实现一个任务进度的统计功能。

 

1.公共的组件、样式


class Task{static id: number = 1// 任务名称name: string = `任务${Task.id++}`// 任务状态: 是否完成finished: boolean = false
}// 统计的卡片样式
@Styles function card(){.width('95%').padding(20).backgroundColor(Color.White).borderRadius(15).shadow({radius: 6,color: '#1f0000',offsetX:2,offsetY:4})
}// 任务完成样式
@Extend(Text) function finishedTask(){.decoration({type:TextDecorationType.LineThrough}).fontColor('#b1b2b1')
}@Entry
@Component
struct PropPage {// 总任务数量@State totalTask: number = 0// 已经完成数量@State finishTask: number = 0// 任务数量@State tasks: Task[] = []build() {Column({space:10}) {}.width('100%').height('100%').backgroundColor('#f1f2f3')}
}

整个Demo主要分为三部分完成,最上边的任务进度卡片、中间的新增按钮和下面的任务进度列表。我们分步骤来完成 

2.任务进度卡片的制作

1.排版

我们使用行标签套两个text标签来完成数字的展示使用justifyContent(FlexAlign.SpaceEvenly)来做对齐处理

        Row(){Text("任务进度").fontSize(30).fontWeight(FontWeight.Bold)Row(){Text(this.finishTask.toString()).fontSize(24).fontColor('#36d')Text(' / ' +this.totalTask.toString()).fontSize(24)}}.card().margin({top:20,bottom:10}).justifyContent(FlexAlign.SpaceEvenly)

2.任务条组件

我们在使用进度条组件的时候,可以查看ArkUI的官方文档。

文档中心

文档中有组件的使用方法和传值的类型。

 

3. 叠加容器

我们会发现数字没有嵌入我们的任务条组件内。我们需要用到叠加容器Stack。 

具体文档可以参考ArkTS官方文档。就是把要叠加的容器放在Stack({

}) 中就可以了。

        // 1.任务进度卡片Row(){Text("任务进度").fontSize(30).fontWeight(FontWeight.Bold)Stack(){Progress({value:this.finishTask,total:this.totalTask,type:ProgressType.Ring}).width(100)Row(){Text(this.finishTask.toString()).fontSize(24).fontColor('#36d')Text(' / ' +this.totalTask.toString()).fontSize(24)}}}

这样我们的任务进度卡片就完成啦。 

2.新增任务按钮的制作

        // 2.新增任务按钮Button('新增任务').width(200).onClick(()=>{// 1.新增任务this.tasks.push(new Task())// 2.更新任务数组this.totalTask = this.tasks.length})

3.任务列表的制作

我们在进行任务列表的制作的时候,需要用到一个复选框,可以参考文档来使用。

文档中心

我们使用foreach来遍历数组完成任务列表的实现,使用checkbox 来完成复选框的逻辑,使用数组方法filter来过滤选中的也就是完成的个数来改变任务条组件的状态。 

通过封装一个更新任务进度的函数,来提高代码的复用性

  // 通过过滤方法 更新已完成的任务数量handleTaskChange(){// 更新任务总数量this.totalTask = this.tasks.length// 已经完成的任务数量this.finishTask = this.tasks.filter(item => item.finished).length}// 3.卡片列表ForEach(this.tasks,(item: Task,index)=>{Row(){Text(item.name).fontSize(20)Checkbox().select(item.finished).onChange(val=>{item.finished = val// 通过过滤方法 更新已完成的任务数量this.finishTask = this.tasks.filter(item => item.finished).lengththis.handleTaskChange()})}.card().justifyContent(FlexAlign.SpaceBetween)})

我们的 任务进度管理初步样式就完成了。

 

 4.滑动删除操作的实现

我们的功能需要一个向左滑动可以删除任务的按钮,并且下面应该是滚动的,我们将我们的任务列表改造成List来完成这个操作。

        // 3.卡片列表List({space:10}){ForEach(this.tasks,(item: Task,index)=>{ListItem(){Row(){Text(item.name).fontSize(20)Checkbox().select(item.finished).onChange(val=>{item.finished = val// 通过过滤方法 更新已完成的任务数量this.handleTaskChange()})}.card().justifyContent(FlexAlign.SpaceBetween)}})}.width('100%').layoutWeight(1).alignListItem(ListItemAlign.Center)

使用了list 并且使用layoutWeight属性得到剩下的所有高度,可以保证我们的高度自适应,可以下拉,解决了任务太多看不见的问题。

 向左滑动出现按钮,List有可以直接使用的属性swipeAction,可以查看文档他的使用方法。


class Task{static id: number = 1// 任务名称name: string = `任务${Task.id++}`// 任务状态: 是否完成finished: boolean = false
}// 统计的卡片样式
@Styles function card(){.width('95%').padding(20).backgroundColor(Color.White).borderRadius(15).shadow({radius: 6,color: '#1f0000',offsetX:2,offsetY:4})
}// 任务完成样式
@Extend(Text) function finishedTask(){.decoration({type:TextDecorationType.LineThrough}).fontColor('#b1b2b1')
}@Entry
@Component
struct PropPage {// 总任务数量@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() {Column({space:10}) {// 1.任务进度卡片Row(){Text("任务进度").fontSize(30).fontWeight(FontWeight.Bold)Stack(){Progress({value:this.finishTask,total:this.totalTask,type:ProgressType.Ring}).width(100)Row(){Text(this.finishTask.toString()).fontSize(24).fontColor('#36d')Text(' / ' +this.totalTask.toString()).fontSize(24)}}}.card().margin({top:20,bottom:10}).justifyContent(FlexAlign.SpaceEvenly)// 2.新增任务按钮Button('新增任务').width(200).onClick(()=>{// 1.新增任务this.tasks.push(new Task())// 2.更新任务数组this.totalTask = this.tasks.length})// 3.卡片列表List({space:10}){ForEach(this.tasks,(item: Task,index)=>{ListItem(){Row(){Text(item.name).fontSize(20)Checkbox().select(item.finished).onChange(val=>{item.finished = val// 通过过滤方法 更新已完成的任务数量this.handleTaskChange()})}.card().justifyContent(FlexAlign.SpaceBetween)}.swipeAction({end:this.DeleteButton(index)})})}.width('100%').layoutWeight(1).alignListItem(ListItemAlign.Center)}.width('100%').height('100%').backgroundColor('#f1f2f3')}@Builder DeleteButton(index: number){Button("删除").onClick(()=>{this.tasks.splice(index,1)this.handleTaskChange()})}
}

至此,我们的任务统计案例 就学习完了。 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/276643.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

物联网终端设备众多,为何遥测终端机备受瞩目?

遥测终端机是一种用于数据采集、远程传输、数据存储与处理的综合体设备,已逐渐成为现代智能物联领域的焦点。遥测终端机集成了多种传感器与通信模块,能够实时采集各种环境参数,如温度、湿度、压力、流量等,同时支持无线通信&#…

基于径向模糊的体积光在Cesium中的应用

概述 当空间中包含足够稠密的光散射介质(例如气体分子和气溶胶)时,光源透过遮挡物的缝隙投射的光线打在空气中的尘埃上,产生散射进入到人眼中,这些光线看起来像是一道一道的光柱,被称为体积光。 在图形渲…

美易官方:道指续创收盘历史新高

美国股市周三继续上涨,道琼斯工业平均指数连续六个交易日收高,并再次创下收盘历史新高。尽管市场对全球经济增长放缓的担忧依然存在,但美国经济数据的强劲表现以及企业盈利的良好预期,使得投资者对股市的信心得到提振。 在今日的交…

【seata】 seata整合nacos + springcloud alibaba 真保姆级教程 解决各种坑点

前言: 坑点太多了,以至于需要单独写篇博客记录一下。 网上教程五花八门且不声明版本,文档不对应以及seata本身的bug,就造成了部署时各种踩坑,如果你和博主一样,已经又恰好很久没碰过nacos了,那可…

探索SSL证书的应用场景,远不止网站,还有小程序、App Store等

说到SSL证书,我们都知道其是用于实现HTTPS加密保障数据安全的重要工具,在建设网站的时候经常会部署SSL证书。但实际上,SSL证书的应用场景远不止网站,它还被广泛地应用到小程序、App Store、抖音广告、邮件服务器以及各种物联网设备…

常用的系统存储过程

exec sp_databases ---列出服务器上所有的数据库信息 exec sp_help student ---查看学生表中的所有信息 exec sp_renamedb Myschool,MySchools ---更改数据库的名称 需要两个参数 一个是原来数据库的名称 一个是要改为的数据库名称 消息框显示:数据库 名称 MyS…

KITTI数据集处理为COCO数据集格式

KITTI作为自动驾驶常用数据集,被广泛的应用于自动驾驶目标检测等过程中。 首先是数据集类别合并,原始的KITTI数据集有九个类别,分别是: Car Van Truck Pedestrian Person_sitting Cyclist Tram Misc而我们在使用过程中&#xff0…

led护眼台灯对眼睛伤害大吗?推荐专业的学生护眼台灯

护眼台灯如何挑选,一直是广大家长的一道难题,因为如今市场上的台灯种类是在太多了,让眼眼花缭乱,其中还混杂着不少不专业的品牌,一不留神就很有可能会踩雷。也有很多人问LED护眼台灯对眼睛伤害大吗? 其实一…

香港威雅报告:香港威雅学校入选英国《优秀学校指南》

今天,我们很荣幸地和大家分享一个特别的消息——香港威雅已接受了英国领先的学校审查机构——《优秀学校指南》(The Good Schools Guide)的全面评审。这是一家值得信赖的权威评审机构,相关工作人员来访并审查了我们的学校&#xf…

零信任 SASE 办公安全解决方案:提升企业网络安全与灵活性

​零信任 SASE(Secure Access Service Edge)办公安全解决方案为企业带来了许多好处,相较于以前的解决方案有明显差异。这个方案的出现是为了应对企业面临的新的网络安全挑战和远程办公的需求。 1、统一的网络安全管理:SASE 将网络…

世微 AP9166 DC-DC降压IC 18V 2A同步降压转换器

600KHz,18V,2A同步降压转换器 概述 AP9166是一款完全集成的效率2A同步整流降压转换器。AP9166运行在宽输出电流上以高效率 负载范围。此设备提供两个操作模式、PWM控制和PFM模式切换控制,允许更宽范围的高效率 负载AP9166至少需要现成标准的…

浏览器输入URL再按下回车会经历哪些过程

目录 前言 一、解析URL 二、解析域名(DNS) 三、TCP三次握手建立连接 1.seq、syn、ack含义 2.三次握手 四、发送http/https请求 五、服务器响应请求 六、浏览器解析渲染页面 七、TCP四次挥手断开连接 总结 前言 看各种面经发现这个问题是一个高频出现的面试问题,但…