HarmonyOS 应用 · 班级任务首页深度解析:Progress 环形进度与 toggle 勾选刷新
HarmonyOS 应用 · 班级任务首页深度解析Progress 环形进度与 toggle 勾选刷新项目编号48-class-task 技术栈HarmonyOS ArkTS · ArkUI 声明式 UI · Stage 模型 本篇页面首页HomeTab.ets103 行 系列导航一首页· 二任务 · 三进度 · 四我的一、Theme.ets紫色主题与任务管理产品的色彩语义export class C { static readonly bg: string #F2F5FB; static readonly card: string #FFFFFF; static readonly cardSoft: string #F4F6FB; static readonly stroke: string #EAEEF6; static readonly text: string #1C2333; static readonly textSub: string #5A6483; static readonly textDim: string #9AA3BC; static readonly primary: string #6C5CE7; static readonly primarySoft: string #ECE8FD; static readonly accent: string #9B8AF5; static readonly warn: string #FF9F1C; static readonly danger: string #FF5A6E; static readonly ok: string #2BB673; }班级任务的主色是#6C5CE7深紫与班费管理的#00A862翡翠绿、通讯录的#0984E3亮蓝形成区分。紫色传递任务/协作/管理的色彩语义——任务管理是协调型应用紫色比绿色更中性、比蓝色更有调度感。primarySoft#ECE8FD是浅紫底色做头像背景。二、Index.etsTabs 容器与四 Tab 布局Tabs({ barPosition: BarPosition.End, index: this.current }) { TabContent() { HomeTab() }.tabBar(this.bar(首页, , 0)) TabContent() { Func1Tab() }.tabBar(this.bar(任务, ✏️, 1)) TabContent() { Func2Tab() }.tabBar(this.bar(进度, , 2)) TabContent() { ProfileTab() }.tabBar(this.bar(我的, , 3)) } .barBackgroundColor(#FFFFFF) .barHeight(60 this.safeBottom) .scrollable(false) .onChange((idx: number) { this.current idx; }) .width(100%).height(100%).backgroundColor(C.bg)四个 Tab首页()/任务(✏️)/进度()/我的()。任务管理的四个环节查看今日任务 → 创建新任务 → 查看成员进度 → 个人统计。三、Task interface 与 State tasks 数组interface Task { id: number; emoji: string; title: string; owner: string; deadline: string; done: boolean; }六个字段id是 key 锚点emoji是任务图标title是任务标题owner是负责人deadline是截止时间done是是否完成的布尔位。done是首页的核心状态字段——驱动勾选符号、标题颜色、删除线三态变化。State tasks: Task[] [ { id: 1, emoji: , title: 收齐班费并登记, owner: 生活委员, deadline: 今天, done: false }, { id: 2, emoji: , title: 发布运动会通知, owner: 宣传委员, deadline: 今天, done: true }, { id: 3, emoji: , title: 统计社会实践报名, owner: 学习委员, deadline: 明天, done: false }, { id: 4, emoji: , title: 筹备班级团建, owner: 文娱委员, deadline: 本周, done: false } ];State tasks是State修饰的数组——与普通private不同State让数组引用变化时触发 UI 刷新。四条任务1 项已完成发布运动会通知 3 项待完成。四、doneCount 与 toggle不可变更新模式private doneCount(): number { let n 0; this.tasks.forEach((t: Task) { if (t.done) { n; } }); return n; } private toggle(item: Task): void { item.done !item.done; this.tasks this.tasks.slice(); }doneCount()遍历tasks统计已完成数——每次调用都重新计算保证进度始终最新。toggle(item)是首页的核心交互方法——两步不可变更新// 1. 翻转 done 布尔位 item.done !item.done; // 2. slice() 生成新数组引用触发 State 刷新 this.tasks this.tasks.slice();slice()无参调用返回数组浅拷贝——新引用触发State重新渲染ProgressCard 的环形进度和 TaskList 的勾选态同步刷新。这是 ArkUI 中数组状态更新的标准范式。五、ProgressCardProgress 环形组件 渐变背景Builder ProgressCard() { Row({ space: 16 }) { Stack({ alignContent: Alignment.Center }) { Progress({ value: this.doneCount(), total: this.tasks.length, type: ProgressType.Ring }) .width(64).height(64).color(#FFFFFF).style({ strokeWidth: 6 }).backgroundColor(#44FFFFFF) Text(this.doneCount() / this.tasks.length).fontSize(14).fontWeight(FontWeight.Bold).fontColor(#FFFFFF) } Column({ space: 4 }) { Text(今日任务进度).fontSize(16).fontWeight(FontWeight.Bold).fontColor(#FFFFFF) Text(还有 (this.tasks.length - this.doneCount()) 项待完成).fontSize(12).fontColor(#FFFFFF).opacity(0.9) }.alignItems(HorizontalAlign.Start).layoutWeight(1) } .width(100%).padding(18).borderRadius(D.rLg) .linearGradient({ angle: 135, colors: [[C.primary, 0.0], [C.accent, 1.0]] }) }Progress组件——系列首次出现的环形进度Progress({ value: this.doneCount(), total: this.tasks.length, type: ProgressType.Ring }) .width(64).height(64).color(#FFFFFF).style({ strokeWidth: 6 }).backgroundColor(#44FFFFFF)ProgressType.Ring环形进度条value是当前值doneCounttotal是总数tasks.length。color(#FFFFFF)白色进度环 backgroundColor(#44FFFFFF)半透明底环——在紫色渐变背景上白环可见。style({ strokeWidth: 6 })环宽 6px。Stack 叠加环形 Progress 中心文字1/4——Alignment.Center让文字居中在环内。右侧今日任务进度 还有 3 项待完成this.tasks.length - this.doneCount()动态计算待完成数。六、TaskListdone 驱动的勾选 删除线双态Builder TaskList() { Column({ space: 10 }) { ForEach(this.tasks, (t: Task) { Row({ space: 12 }) { Text(t.done ? ✅ : ⬜).fontSize(22).onClick(() { this.toggle(t); }) Column({ space: 4 }) { Text(t.title).fontSize(14).fontColor(t.done ? C.textDim : C.text) .decoration({ type: t.done ? TextDecorationType.LineThrough : TextDecorationType.None }) Text(负责人: t.owner · t.deadline).fontSize(12).fontColor(C.textDim) }.alignItems(HorizontalAlign.Start).layoutWeight(1) Text(t.emoji).fontSize(20) } .width(100%).padding(14).backgroundColor(C.card).borderRadius(D.rMd).border({ width: 1, color: C.stroke }) }, (t: Task) t.id.toString()) }.width(100%) }done驱动三元变化——勾选符号、标题颜色、删除线三路分支// 勾选符号✅ vs ⬜ Text(t.done ? ✅ : ⬜) // 标题颜色灰色 vs 深色 .fontColor(t.done ? C.textDim : C.text) // 删除线有 vs 无 .decoration({ type: t.done ? TextDecorationType.LineThrough : TextDecorationType.None })done true时 ✅ 灰色标题 删除线已完成视觉弱化done false时 ⬜ 深色标题 无删除线待完成视觉突出。TextDecorationType.LineThrough是 ArkUI 的删除线装饰——已完成任务的经典视觉表达。勾选符号onClick调this.toggle(t)——点击翻转doneslice()触发刷新ProgressCard 环形进度和 TaskList 勾选态同步更新。七、可演进方向方向现状改法收益任务创建静态 4 条接入任务 Tab 创建后追加任务动态新增数据持久State 内存Preferences 持久化重启不丢失过期检测无比对 deadline 与当前日期过期任务标红拖拽排序无ItemTouchHelper 拖拽任务优先级手动调整任务详情无 onClick点击进入详情页展示完整描述首页是班级任务的概览——ProgressCard 的环形进度 TaskList 的done驱动勾选双态。从toggle的不可变更新到TextDecorationType.LineThrough的删除线装饰每一层都有明确的职责边界。系列导航一首页· 二任务 · 三进度 · 四我的

相关新闻

HarmonyOS 应用 · 班级任务进度页深度解析:Progress 线性条与达标变色

HarmonyOS 应用 · 班级任务进度页深度解析:Progress 线性条与达标变色

HarmonyOS 应用 班级任务进度页深度解析:Progress 线性条与达标变色 项目编号:48-class-task 技术栈:HarmonyOS ArkTS ArkUI 声明式 UI Stage 模型 本篇页面:进度页 Func2Tab.ets(99 行) 系列导航&#…

2026/10/4 15:01:45 阅读更多 →
生产级Agent后端六大核心实践:SSE、Redis状态中枢与Trace贯通

生产级Agent后端六大核心实践:SSE、Redis状态中枢与Trace贯通

1. 这不是Bug,是生产级Agent系统必经的“成人礼”“Agent上线第二天就给用户退了两次款”——这句话刚在内部群弹出来时,我正盯着监控面板上那条突兀的红色告警曲线。没有惊慌,反而下意识点了杯咖啡。干了十年后端,见过太多团队把…

2026/10/4 15:00:45 阅读更多 →
Fantasy Map Generator v1.5.0 纹章更新(Emblems Update)技术解析:自动纹章生成、Armoria 集成与语音朗读

Fantasy Map Generator v1.5.0 纹章更新(Emblems Update)技术解析:自动纹章生成、Armoria 集成与语音朗读

前端图形学3D渲染 【免费下载链接】Fantasy-Map-Generator Web application generating interactive and highly customizable maps 项目地址: https://gitcode.com/gh_mirrors/fa/Fantasy-Map-Generator 点击查看 免费下载 本文基于开源仓库 Fantasy-Map-Generato…

2026/10/4 15:00:45 阅读更多 →

最新新闻

热电联产联合优化:储热与电锅炉如何提升风电消纳及Matlab实现

热电联产联合优化:储热与电锅炉如何提升风电消纳及Matlab实现

每年入冬之后,北方电网的风电消纳曲线总会比春秋两季难看不少。这不是风机故障率变高了,而是热电机组"以热定电"的运行方式把风电的发电空间挤掉了一大块。做过新能源消纳或者电力调度优化的人,大概率都跟这个问题打过照面&#xf…

2026/10/4 15:43:14 阅读更多 →
MCP协议无状态重构实战:Session移除、Sampling收紧与MRTR迁移指南

MCP协议无状态重构实战:Session移除、Sampling收紧与MRTR迁移指南

MCP 这套协议从去年火到现在,我前后在三个项目里接过它的服务端和客户端,也写过两套内部教程。结果上个月翻官方仓库的变更记录,发现我半年前写的东西有一大半已经跑不通了——不是小修小补,是 Session 层被整个拿掉、Sampling 的…

2026/10/4 15:43:14 阅读更多 →
BepInEx Unity 插件框架完整安装指南:从判定游戏类型到跑通第一个插件

BepInEx Unity 插件框架完整安装指南:从判定游戏类型到跑通第一个插件

BepInEx Unity 插件框架完整安装指南:从判定游戏类型到跑通第一个插件 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx 上个月帮朋友装 BepInEx 插件,文件放…

2026/10/4 15:43:14 阅读更多 →
金秋赴约边城,央企赋能文旅!孟连绘就农文旅自驾旅游新画卷

金秋赴约边城,央企赋能文旅!孟连绘就农文旅自驾旅游新画卷

金秋时节,果香盈满边城。10月2日,孟连2026首届自驾游主题活动启动仪式在云南省普洱市孟连县娜允广场隆重举办。本次活动以“慢调孟连漫享边城”为核心主题,创新采用“节庆自驾”融合模式,整合孟连特色农业、边境风光与多元民族文化…

2026/10/4 15:43:14 阅读更多 →
模型加载与GPU渲染原理:从顶点缓冲到绘制调用全解析

模型加载与GPU渲染原理:从顶点缓冲到绘制调用全解析

我第一次把一个低模小场景加载进自研渲染器,看到相机在场景里转起来的那一刻,最强烈的感受不是“画面好看”,而是“我算是亲手把模型喂给了 GPU”。游戏模型加载与渲染,这个主题在各类引擎教程里往往被讲成清单:导出 F…

2026/10/4 15:43:14 阅读更多 →
FastReID工程实战:27个关键参数调优指南

FastReID工程实战:27个关键参数调优指南

1. 这不是调参游戏,是行人重识别的工程化实战手册你打开FastReID仓库,clone下来,跑通baseline,发现mAP只有65%;换了个学习率调度器,涨了0.3;加了个随机擦除,又掉0.2;最后…

2026/10/4 15:42:13 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →