HarmonyOs ----使命统计案例

打印 上一主题 下一主题

主题 821|帖子 821|积分 2463


  • 顶部样式计划


  • 由图中可看出是,程度布局,整体为垂直布局
  1. @Entry
  2. @Component
  3. struct Task_1 {
  4.   build() {
  5.     Column(){
  6.       Row(){
  7.       }
  8.         }
  9.   }
  10. }
复制代码

2.填写内容


  • 因为整体布局样式相同,用@styles 设置整体布局通用样式
  • 因为数值会变化:用@State界说
  • 外面圆圈也会变化,所以用Progress
  • 第一个数值为:选中数值:finish
  • 第二个数值为:总共数值:totall
  1. //设置整体样式
  2. @Styles function card_1(){
  3.   .width('95%')
  4.   .padding(20)
  5.   .backgroundColor(Color.White)
  6.   .borderRadius(15)
  7.   .shadow({radius:6,color:'#1F000000',offsetX:2,offsetY:4})
  8. }
  9. @Entry
  10. @Component
  11. struct Task_1 {
  12.   @State finish:number=0
  13.   @State totall:number=0
  14.   build() {
  15.     Column(){
  16.       Row(){
  17.           Text('任务进度:')
  18.             .fontSize(30)
  19.             .fontWeight(FontWeight.Bold)
  20.         Stack(){
  21.           Progress({value:this.finish,total:this.totall,type:ProgressType.Ring})
  22.             .width(100)
  23.           Row(){
  24.             Text(this.finish+'')
  25.               .fontSize(30)
  26.               .fontColor('#36D')
  27.             Text(' / '+this.totall)
  28.               .fontSize(30)
  29.           }
  30.         }
  31.       }
  32. //引用自定义样式card_1
  33.       .card_1()
  34.       .justifyContent(FlexAlign.SpaceAround)
  35.     }
  36.   }
  37. }
复制代码



  • 设置按钮

  • 设置按钮样式
  1. @Entry
  2. @Component
  3. struct Task_1 {
  4.   @State finish:number=0
  5.   @State totall:number=0
  6.   build() {
  7.     Column(){
  8. Row(){//顶部样式}
  9. //设置按钮样式
  10.       Button('新增任务')
  11.         .width(140)
  12.         .margin({top:10})
  13.     }
  14.   }
  15. }
复制代码

2.添加数组


  • task类中的id是静态变量,可以被task类中的所有对象共享
  1. //创建task类
  2. class task{
  3.   static id :number=1
  4.   name:string=`任务${task.id++}`
  5.   Boole:boolean=false
  6. }
  7. @Entry
  8. @Component
  9. struct Task_1 {
  10.   @State finish:number=0
  11.   @State totall:number=0
  12.   // 数组类型
  13.   @State task:task[]=[]
  14.   build() {
  15.     Column(){
  16.     Row(){//顶部样式}
  17.    Button('新增任务')
  18.         .width(140)
  19.         .margin({top:10})
  20.     }
  21.   }
  22. }
复制代码

3.添加事故:点击按钮,随之数组增长(顶部totall变化)


  • push是增长一条新数组
  •  this.task_1.push(new task_1()):只写 task_1():上面已经界说,就不用在写
  • 数组总值增长,totall数值随之变化
  1. //创建task类
  2. class task_1{
  3.   static id :number=1
  4.   name:string=`任务${task_1.id++}`
  5.   Boole:boolean =false
  6. }
  7. @Entry
  8. @Component
  9. struct Task_1 {
  10.   @State finish:number=0
  11.   @State totall:number=0
  12.   // 数组类型
  13.   @State task_1:task_1[]=[]
  14.   build() {
  15.     Column(){
  16.     Row(){//顶部样式}
  17.       Button('新增任务')
  18.         .width(200)
  19.         .margin({top:10})
  20.         .onClick(()=>{
  21.           this.task_1.push(new task_1())
  22. //totall数值是数组长度
  23.           this.totall=this.task_1.length
  24.         })
  25.     }
  26.   }
  27. }
复制代码




  • 添加内容

  • 用ForEach循环数组:
  1. @Entry
  2. @Component
  3. struct Task_1 {
  4.   @State finish:number=0
  5.   @State totall:number=0
  6.   // 数组类型
  7.   @State task_1:task_1[]=[]
  8.   build() {
  9.     Column(){
  10.     Row(){//顶部样式}
  11. Button()//设置按钮样式     
  12.       ForEach(this.task_1,(item:task_1,index)=>{
  13.         Row(){
  14.           Text(item.name)
  15.             .fontSize(20)
  16.         }
  17.       })
  18.     }
  19.   }
  20. }
复制代码

2.添加多选框


  • select(item.Boole):select是布尔值,Boole:上面在函数中被设布尔值
  1. @Entry
  2. @Component
  3. struct Task_1 {
  4.   @State finish:number=0
  5.   @State totall:number=0
  6.   // 数组类型
  7.   @State task_1:task_1[]=[]
  8.   build() {
  9.     Column(){
  10.     Row(){//顶部样式}
  11. Button()//设置按钮样式     
  12.       ForEach(this.task_1,(item:task_1,index)=>{
  13.         Row(){
  14.           Text(item.name)
  15.             .fontSize(20)
  16. Checkbox()
  17.    .select(item.Boole)
  18.         }
  19.       })
  20.     }
  21.   }
  22. }
复制代码

  • 设置样式
  1. @Entry
  2. @Component
  3. struct Task_1 {
  4.   @State finish:number=0
  5.   @State totall:number=0
  6.   // 数组类型
  7.   @State task_1:task_1[]=[]
  8.   build() {
  9.     Column(){
  10.     Row(){//顶部样式}
  11. Button()//设置按钮样式     
  12.       ForEach(this.task_1,(item:task_1,index)=>{
  13.         Row(){
  14.           Text(item.name)
  15.             .fontSize(20)
  16. Checkbox()
  17.    .select(item.Boole)
  18.         }
  19. .card_1()
  20. .justifyContent(FlexAlign.SpaceBetween)
  21.       })
  22.     }
  23.   }
  24. }
复制代码

4.添加监听事故:监听task_1变化



  • onChange:如Checkbox类型变化,finish增长
  1. @Entry
  2. @Component
  3. struct Task_1 {
  4.   @State finish:number=0
  5.   @State totall:number=0
  6.   // 数组类型
  7.   @State task_1:task_1[]=[]
  8.   build() {
  9.     Column(){
  10.     Row(){//顶部样式}
  11. Button()//设置按钮样式     
  12.       ForEach(this.task_1,(item:task_1,index)=>{
  13.         Row(){
  14.           Text(item.name)
  15.             .fontSize(20)
  16. Checkbox()
  17.    .select(item.Boole)
  18. .onChange(()=>{
  19.   this.finish=this.task_1.filter(item=>item.Boole).length
  20. })
  21.         }
  22. .card_1()
  23. .justifyContent(FlexAlign.SpaceBetween)
  24.       })
  25.     }
  26.   }
  27. }
复制代码



  • 设置列表

  • 在list,ListItem内添加数组
  1. @Entry
  2. @Component
  3. struct Task_1 {
  4. build() {
  5.     Column(){
  6.     Row(){//顶部样式}
  7. Button()//设置按钮样式     
  8. List(){
  9.   ForEach(this.task_1,(item:task_1,index)=>{
  10.   ListItem() {
  11.     Row() {
  12.       Text(item.name)
  13.         .fontSize(20)
  14.       Checkbox()
  15.         .select(item.Boole)
  16.     }
  17.     .card_1()
  18.     .justifyContent(FlexAlign.SpaceBetween)
  19.   }
  20.   })
  21. }
  22. }
  23. }
  24. }
复制代码


  • 设置样式
  1. @Entry
  2. @Component
  3. struct Task_1 {
  4. build() {
  5.     Column(){
  6.     Row(){//顶部样式}
  7. Button()//设置按钮样式     
  8. List({space:10}){
  9.   ForEach(this.task_1,(item:task_1,index)=>{
  10.   ListItem() {
  11.     Row() {
  12.       Text(item.name)
  13.         .fontSize(20)
  14.       Checkbox()
  15.         .select(item.Boole)
  16.     }
  17.     .card_1()
  18.     .justifyContent(FlexAlign.SpaceBetween)
  19.   }
  20.   })
  21. }
  22. .layoutWeight(1)
  23. .alignListItem(ListItemAlign.Center)
  24. }
  25. }
  26. }
复制代码

  • 设置左滑动,并删除该组数据

  • .swipeAction({end: this.DeleteButton(index) }):end后添加函数

  • 用@Builder 创建函数
  •  this.tasks.splice(index,1):splice删除index索引的一个数组
  • 在同步一下totall,finish数据
  1. @Entry
  2. @Component
  3. struct Task_1 {
  4. build() {
  5.     Column(){
  6.     Row(){//顶部样式}
  7. Button()//设置按钮样式     
  8. List({space:10}){
  9.   ForEach(this.task_1,(item:task_1,index)=>{
  10.   ListItem() {
  11.     Row() {
  12.       Text(item.name)
  13.         .fontSize(20)
  14.       Checkbox()
  15.         .select(item.Boole)
  16.     }
  17.     .card_1()
  18.     .justifyContent(FlexAlign.SpaceBetween)
  19.   }
  20.   })
  21. }
  22. .layoutWeight(1)
  23. .alignListItem(ListItemAlign.Center)
  24. }
  25. }
  26. @Builder DeleteButton(index:number){
  27.   Button({type:ButtonType.Circle}){
  28. //矢量图
  29.     Image('/Task/task_delete.svg')
  30. //改变矢量图颜色
  31.       .fillColor(Color.White)
  32.       .width(50)
  33.   }
  34.   .width(80)
  35.   .margin(5)
  36.   .width(80)
  37.   .backgroundColor(Color.Red)
  38.   .onClick(()=>{
  39.     this.tasks.splice(index,1)
  40.     this.finishTask=this.tasks.filter(item=>item.finished).length
  41.     this.totallTask = this.tasks.length
  42.   })
  43. }
复制代码
有什么不足恣意提,我下次改进!!!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

钜形不锈钢水箱

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表