首页 > 其他分享 >鸿蒙开发状态管理示例

鸿蒙开发状态管理示例

时间:2024-10-09 15:49:39浏览次数:1  
标签:状态 Task 20 鸿蒙 示例 finishTask number item totalTask

@Observed
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: '#1F000000',
    offsetX: 2,
    offsetY: 4
  })
}

@Extend(Text)
function finishedTask() {
  .decoration({ type: TextDecorationType.LineThrough })
  .fontColor('#B1B2B1')
}

@Entry
@Component
struct TaskPage {
  @State totalTask: number = 0
  @State finishTask: number = 0

  build() {
    Column({ space: 10 }) {
      //   1 任务进度卡片
      TaskStatistics({ totalTask: this.totalTask, finishTask: this.finishTask })
      TaskList({ totalTask: $totalTask, finishTask: $finishTask })
    }
    .width('100%')
    .height('100%')
    .backgroundColor('#F1F2F3')
  }
}

/*任务统计组件*/
@Component
struct TaskStatistics {
  @Prop totalTask: number
  @Prop finishTask: number

  build() {
    Row() {
      Text('任务进度:').fontSize(30).fontWeight(FontWeight.Bold)
      Stack() {
        Progress({ value: this.finishTask, total: this.totalTask, type: ProgressType.Ring })

        Row() {
          Text(this.finishTask.toString()).fontSize(24).fontColor('#36D')
          Text('/' + this.totalTask.toString()).fontSize(24)
        }
      }
    }
    .card()
    .margin({ top: 20, bottom: 10 })
    .justifyContent(FlexAlign.SpaceEvenly)
  }
}

/*任务列表组件*/
@Component
struct TaskList {
  @Link totalTask: number
  @Link finishTask: number
  @State Tasks: Task[] = []

  handleTaskChange() {
    this.totalTask = this.Tasks.length
    this.finishTask = this.Tasks.filter(item => item.finished).length
  }

  build() {
    Column() {
      //   2 新增任务按钮
      Button('新增任务').width(200).margin({ bottom: 20 }).onClick(() => {
        this.Tasks.push(new Task())
        this.handleTaskChange()
      })
      //   3 任务列表
      List({ space: 10 }) {
        ForEach(this.Tasks, (item: Task, index: number) => {
          ListItem() {
            TaskItem({ item: item, onChangeTask: this.handleTaskChange.bind(this) })
          }
          .swipeAction({ end: this.DeleteButton(index) })
        })
      }
      .width('100%')
      .alignListItem(ListItemAlign.Center)
      .layoutWeight(1)
    }
  }

  @Builder
  DeleteButton(index: number) {
    Button() {
      Image($r('app.media.delete_big')).width(20).fillColor(Color.White)
    }
    .width(40)
    .height(40)
    .backgroundColor(Color.Red)
    .margin(5)
    .onClick(() => {
      this.Tasks.splice(index, 1)
      this.handleTaskChange()
    })
  }
}

/*任务列表元素*/
@Component
struct TaskItem {
  @ObjectLink item: Task
  onChangeTask?: () => void

  build() {
    Row() {
      if (this.item.finished) {
        Text(this.item.name).fontSize(20).finishedTask()
      } else {
        Text(this.item.name).fontSize(20)
      }

      Checkbox().select(this.item.finished)
        .onChange(val => {
          this.item.finished = val
          if (this.onChangeTask) {
            this.onChangeTask()
          }
        })
    }
    .card()
    .justifyContent(FlexAlign.SpaceBetween)
  }
}

 

标签:状态,Task,20,鸿蒙,示例,finishTask,number,item,totalTask
From: https://www.cnblogs.com/longfeiPHP/p/18454454

相关文章

  • 状态压缩的动态规划
    以洛谷无向图求环问题为例#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#defineregregisterintintn,m;inta[19][19];llf[1<<19][19];llres=0;intmain(){cin>>n>>m;for(inti=1;i<=m;i++){intj,......
  • 鸿蒙 Next 实战: 烟花模拟器
    前言通过上一篇文章可以看出,要在鸿蒙应用中实现特别炫的特效还是比较复杂。动画固然重要,但如果在赶工期的情况下,大家都会优先业务,那有没有简单快速的方法呢?有的,也用像Android和iOS里WebView的方式,h5的特效现在是应有尽有,把他嵌入鸿蒙Next应用里就可以,那如何在鸿蒙Next......
  • ThreeJS入门(099):THREE.ArcCurve 知识详解,示例代码
    作者:还是大剑师兰特,曾为美国某知名大学计算机专业研究生,现为国内GIS领域高级前端工程师,CSDN知名博主,深耕openlayers、leaflet、mapbox、cesium,webgl,ThreeJS,canvas,echarts等技术开发,欢迎加微信(gis-dajianshi),一起交流。查看本专栏目录-本文是第100篇入门文章......
  • 华为路由器配置IPV4和IPV6局域网示例
    设计架构图及IP地址如下:PC1和PC2通过DHCP和DHCPV6获取IPV4和IPV6地址,实现图内的所有设备IPV4和IPV6全部互通。1、IPV4配置:R2配置:<Huawei>system-viewEntersystemview,returnuserviewwithCtrl+Z.[Huawei]sysnameR2[R2]interfaceGigabitEthernet0/0/0......
  • EBS 发票状态【选定发票以便付款】处理
    当发票状态为【选定发票以便付款】时,无法再发起发票的完全支付处理处理方式:1、在计划付款页签页面找到如下的付款请求2、打开【付款管理器】界面,将发票界面的【付款请求】放到【付款处理请求】栏位进行查询,将查询道德数据终止即可3、付款请求终止后,发票状态变为【已验证......
  • 鸿蒙开发教程实战案例源码分享-仿微信长按录音效果
    鸿蒙开发仿微信长按录音效果如果你项目有IM聊天,那么长按录音功能是必须的,最好是跟微信一样的效果,对不对。一、思路:自定义触碰事件二、效果图:鸿蒙开发教程实战案例源码分享-仿微信长按录音效果三、关键代码://联系:893151960@Entry@ComponentstructIndex{......
  • 揭秘动态化跨端框架在鸿蒙系统下的高性能解决方案
    作者:京东科技胡大海前言动态化跨端框架(后文统称“动态化”)是一个由京东金融大前端团队全自主研发的,一份代码,可以在HarmonyOS、iOS、Android、Web四端运行的跨平台解决方案。在研发团队使用后可大幅降低研发人力成本;为业务提供实时触达、A/B触达等能力以提升业务投放效率;同时......
  • GUI无代码小示例 - 工作流连线实现0/1连续翻转
    效果如下所示,连续点击按钮,输出0、1、0、1...。  步骤新建页面,拖入组件拖入3个组件:数学计算、输入框、按钮。如下所示: 连线和配置按钮点击→函数执行 1减去输入,作为函数输出这样,当首次执行时,默认操作数1将减去输入的1,输出0。 函数输出......
  • 在K8S中,Pod 可能位处于的状态有哪些?
    在Kubernetes(K8S)中,Pod作为最基本的部署单元,其状态反映了Pod的生命周期和当前状况。Pod可能处于以下几种状态:Pending(等待中):Pod被创建后,正在等待调度器分配所需的节点资源。可能的原因包括等待调度、等待下载镜像、资源不足(如CPU、内存)导致调度器无法找到合适的节点等。在这个......
  • 鸿蒙 Next 实战: 电子木鱼
    前言正所谓:HelloWord是程序员学任何一门语言的第一个程序实践。这其实也是一个不错的正反馈,那如何让学习鸿蒙Next更有成就感呢?下面就演示一下从零开发一个鸿蒙Next版的电子木鱼,主打就是一个抽象! 实现要点页面布局木鱼点击木鱼音效动画特效自定义弹窗 开始实......