鸿蒙 ArkTS 实战:Paper Saving Tracker 从节纸追踪器到绿色生活工具完整解析
前言
Paper Saving Tracker 是一个围绕打印页数、双面提醒、节省页数、部门排名和打印记录的鸿蒙 ArkTS 单页应用。它把绿色生活里的一个具体行为做成可输入、可记录、可反馈的页面,让用户能在日常场景里快速完成一次环保行动记录。
本文基于项目Index.ets源码展开,重点分析状态字段、输入组件、按钮动作、指标展示和反馈文案。文章内容可以直接发布,不依赖额外说明。
绿色生活工具的关键不在功能多,而在动作短。用户输入一次、点击一次、看到一个明确反馈,就已经形成了很好的产品闭环。
配图可用于文章首屏。实际发布时可以替换为真机截图,重点展示输入区域、指标区域、按钮动作和状态反馈。
一、项目定位与使用场景
1.1 应用定位
用户输入本次打印页数,并通过双面开关计算节省纸张数量,页面同步更新部门排名和记录文案。
这个项目适合作为低碳生活、环保习惯、社区协作或家庭记录工具的功能原型。它没有复杂路由,主逻辑集中在一个页面中,便于阅读、调试和继续扩展。
1.2 目标拆解
| 目标 | 说明 | 页面体现 |
|---|---|---|
| 快速记录 | 用户能在一个页面完成输入 | TextInput |
| 行为反馈 | 点击后立即更新状态 | Button |
| 指标可见 | 用数字表达累计结果 | Saved pages |
| 建议明确 | 文案给出下一步动作 | 状态文本 |
二、源码入口与页面骨架
2.1 入口结构
项目使用标准 ArkTS 页面组件。
@Entry@Componentstruct Index{build(){Scroll(){Column({space:16}){Text('Paper Saving Tracker')}}}}2.2 页面层次
页面主要由四块构成:
- 输入区:填写行为对象、地点、规则或数值。
- 指标区:展示
Saved pages。 - 动作区:触发保存、记录、分析或提醒。
- 反馈区:显示状态、建议、安全提示或下一步信息。
三、状态模型抽象
3.1 模型定义
从源码状态可以抽象出PaperSavingState。
typePaperSavingState={title:string;value:string|number;note:string;updated:boolean;};3.2 实际状态代码
项目中真实使用的状态如下。
@StateprintPages:string='24';@StatedoubleSide:boolean=true;@StatesavedPages:number=68;@StatedepartmentRank:number=2;3.3 状态职责表
| 状态 | 类型 | 职责 |
|---|---|---|
printPages | 状态字段 | 支撑 节纸追踪器 的输入、统计或反馈 |
doubleSide | 状态字段 | 支撑 节纸追踪器 的输入、统计或反馈 |
savedPages | 状态字段 | 支撑 节纸追踪器 的输入、统计或反馈 |
departmentRank | 状态字段 | 支撑 节纸追踪器 的输入、统计或反馈 |
note | 状态字段 | 支撑 节纸追踪器 的输入、统计或反馈 |
这些状态都直接参与 UI 渲染。只要用户输入或点击按钮,状态变化就会反馈到页面。
四、默认数据与首屏理解
4.1 默认内容
| 默认项 | 初始值 | 含义 |
|---|---|---|
| 24 | 打印页数 | 默认打印记录 |
| doubleSide | true | 双面提醒开启 |
4.2 默认值的意义
默认值让用户打开页面后无需猜测功能。比如Paper Saving Tracker会直接给出一个可编辑的初始对象和一个可观察的指标,用户点击主按钮就能看到状态变化。
- 默认文本说明输入格式。
- 默认数字支撑指标展示。
- 默认提示引导用户完成下一步。
五、核心动作函数
5.1 主要动作代码
项目的核心行为由按钮触发,下面是主要逻辑。
recordPrint():void{letpages=Number(this.printPages);letsaved=this.doubleSide?Math.floor(pages/2):0;this.savedPages+=saved;this.departmentRank=Math.max(1,this.departmentRank-(saved>10?1:0));this.note='Print recorded. Saved pages: '+saved+'.';}5.2 动作流程
- 输入打印页数
- 切换双面提醒
- 记录打印
- 累计节省页数和部门排名
这条流程短而明确,适合移动端工具。用户不需要跨页面,也不需要复杂配置。
六、辅助逻辑与扩展动作
6.1 辅助代码
源码中还包含辅助动作、提示更新或二级按钮。
Toggle({type:ToggleType.Switch,isOn:this.doubleSide}).onChange((v:boolean)=>this.doubleSide=v)6.2 多动作设计
| 动作类型 | 作用 | 用户收益 |
|---|---|---|
| 保存 | 记录地点、品牌、对象或计划 | 便于复用 |
| 记录 | 增加次数、时长、积分或照片 | 形成累计 |
| 提醒 | 设置下一次行动提示 | 促进习惯 |
| 反馈 | 给出安全、评分或建议 | 降低误用 |
七、输入组件设计
7.1 TextInput 绑定
输入框直接绑定@State字段。
TextInput({text:this.printPages,placeholder:'Input value'}).onChange((value:string)=>this.printPages=value)7.2 数字输入处理
涉及数量、功率、天数或次数时,代码会把字符串转成数字。
letvalue=Number(inputText);if(Number.isNaN(value)){// show message or ignore invalid input}这类处理虽然简单,但决定了工具是否可靠。
八、指标展示策略
8.1 核心指标
当前页面的关键指标是Saved pages。
Text('Saved pages '+value).fontSize(24).fontWeight(FontWeight.Bold)8.2 指标作用
| 指标作用 | 表达方式 | 产品价值 |
|---|---|---|
| 记录成果 | 次数、照片、积分、节省量 | 让行动可见 |
| 表达进度 | 排名、连续天数、评分 | 建立激励 |
| 引导改善 | 安全提示、建议、提醒 | 促进下一步 |
九、按钮交互设计
9.1 Button 的职责
按钮不只是触发点击,它承载了页面最重要的业务意图。
Button('Main Action').width('100%').onClick(()=>{// update state})9.2 交互反馈
点击按钮后至少要更新一个可见状态:数字、提醒、说明、照片数量、积分或评分。否则用户无法判断操作是否生效。
在环保工具里,反馈文案要尽量具体。例如“已保存回收点”比“成功”更有价值。
十、布局与视觉设计
10.1 Scroll 容器
页面使用Scroll包裹内容,可以适应输入项和按钮数量增长。
Scroll(){Column({space:16}){Text('Paper Saving Tracker')// inputs// metric// actions// feedback}.padding(20).width('100%')}10.2 颜色语义
| 颜色方向 | 适合场景 | 作用 |
|---|---|---|
| 绿色 | 回收、分类、植物、低碳行动 | 强化环保感 |
| 蓝色 | 数据分析、设备对比、提醒 | 表达理性与稳定 |
| 黄色 | 早餐、生活打卡、温和提示 | 表达日常习惯 |
| 棕色 | 旧书、电池、堆肥等物品流转 | 表达生活材料感 |
十一、状态反馈文案
11.1 文案类型
项目里的文案承担用户引导职责。
| 文案类型 | 例子 | 功能 |
|---|---|---|
| 记录成功 | 投递、签到、保存完成 | 确认动作 |
| 安全提醒 | 电池处理、分类规则 | 防止误操作 |
| 习惯建议 | 明天继续、设置提醒 | 促进坚持 |
| 结果说明 | 节省、评分、积分 | 展示价值 |
11.2 文案更新
文案通常通过状态字段更新。
this.status='Action recorded.';this.reminder='Next reminder updated.';十二、运行验证流程
12.1 手工验证
可以按下面流程验证页面:
- 打开页面,确认标题为
Paper Saving Tracker。 - 检查默认输入值和指标是否存在。
- 修改输入框内容。
- 点击主要按钮。
- 观察指标和反馈文案是否变化。
// 验证路径示例constbefore='default state';constaction='tap primary button';constafter='visible state updated';console.info(before+' -> '+action+' -> '+after);12.2 验证重点
| 验证点 | 预期 |
|---|---|
| 输入同步 | 文本状态随输入变化 |
| 按钮触发 | 对应函数执行 |
| 数值变化 | 指标即时更新 |
| 文案变化 | 用户知道发生了什么 |
| 连续点击 | 累计逻辑不异常 |
十三、边界情况处理
13.1 数值边界
如果项目涉及功率、页数、次数、成本、碳排或天数,需要考虑空值、负数和非数字输入。
constnum=Number(text);if(!Number.isFinite(num)||num<0){// show friendly feedback}13.2 业务边界
需要重点关注:
- 未填写地点时是否还能保存。
- 连续点击是否造成异常累计。
- 评分是否超过最大值。
- 成本或积分是否出现负数。
- 提醒文案是否与当前输入一致。
十四、扩展为完整工具
14.1 业务扩展
后续可以加入打印历史、部门榜单、纸张成本估算、月度报告和默认双面打印提醒。
14.2 工程扩展
可以抽象统一绿色行动记录。
interfaceGreenAction{name:string;metric:number;unit:string;note:string;time:number;}functioncreateGreenAction(name:string,metric:number,unit:string,note:string):GreenAction{return{name,metric,unit,note,time:Date.now()};}统一模型能帮助后续接入历史列表、图表、提醒和本地存储。
十五、工程复盘
15.1 当前实现亮点
- 页面逻辑集中,易读易改。
- 输入和状态绑定直接。
- 主要动作有即时反馈。
- 指标能体现绿色行动成果。
- 适合继续扩展为完整生活工具。
15.2 可复用经验
Paper Saving Tracker的实现可以迁移到很多生活应用:回收、打卡、设备对比、社区活动、家庭记录、植物养护和物品流转。关键是把一次真实行动压缩成一个清晰的页面闭环。
总结
Paper Saving Tracker用鸿蒙 ArkTS 构建了一个围绕节纸追踪器的绿色生活工具。它通过@State保存输入和结果,通过TextInput获取用户记录,通过按钮触发业务函数,再用指标和文案把结果反馈给用户。
从工程角度看,这个项目已经完成了从输入到反馈的核心路径。后续继续加入历史记录、地图、提醒、图表或本地存储,都可以沿着当前状态结构自然演进。
补充说明:当前页面保留了很短的操作路径,适合日常场景里快速完成一次记录。
补充说明:指标展示让绿色行动从抽象口号变成可见数字。
补充说明:状态文案承担了引导作用,能让用户知道下一步该怎么做。
补充说明:后续接入持久化时,可以优先保存输入值、指标值、反馈文案和时间戳。
补充说明:当前页面保留了很短的操作路径,适合日常场景里快速完成一次记录。
补充说明:指标展示让绿色行动从抽象口号变成可见数字。
补充说明:状态文案承担了引导作用,能让用户知道下一步该怎么做。
补充说明:后续接入持久化时,可以优先保存输入值、指标值、反馈文案和时间戳。
补充说明:当前页面保留了很短的操作路径,适合日常场景里快速完成一次记录。
补充说明:指标展示让绿色行动从抽象口号变成可见数字。
补充说明:状态文案承担了引导作用,能让用户知道下一步该怎么做。
补充说明:后续接入持久化时,可以优先保存输入值、指标值、反馈文案和时间戳。
补充说明:当前页面保留了很短的操作路径,适合日常场景里快速完成一次记录。
补充说明:指标展示让绿色行动从抽象口号变成可见数字。
补充说明:状态文案承担了引导作用,能让用户知道下一步该怎么做。
补充说明:后续接入持久化时,可以优先保存输入值、指标值、反馈文案和时间戳。
补充说明:当前页面保留了很短的操作路径,适合日常场景里快速完成一次记录。
补充说明:指标展示让绿色行动从抽象口号变成可见数字。
补充说明:状态文案承担了引导作用,能让用户知道下一步该怎么做。
补充说明:后续接入持久化时,可以优先保存输入值、指标值、反馈文案和时间戳。
补充说明:当前页面保留了很短的操作路径,适合日常场景里快速完成一次记录。
补充说明:指标展示让绿色行动从抽象口号变成可见数字。
补充说明:状态文案承担了引导作用,能让用户知道下一步该怎么做。
补充说明:后续接入持久化时,可以优先保存输入值、指标值、反馈文案和时间戳。
补充说明:当前页面保留了很短的操作路径,适合日常场景里快速完成一次记录。
补充说明:指标展示让绿色行动从抽象口号变成可见数字。
补充说明:状态文案承担了引导作用,能让用户知道下一步该怎么做。
补充说明:后续接入持久化时,可以优先保存输入值、指标值、反馈文案和时间戳。
补充说明:当前页面保留了很短的操作路径,适合日常场景里快速完成一次记录。
补充说明:指标展示让绿色行动从抽象口号变成可见数字。
补充说明:状态文案承担了引导作用,能让用户知道下一步该怎么做。
补充说明:后续接入持久化时,可以优先保存输入值、指标值、反馈文案和时间戳。
补充说明:当前页面保留了很短的操作路径,适合日常场景里快速完成一次记录。
补充说明:指标展示让绿色行动从抽象口号变成可见数字。
补充说明:状态文案承担了引导作用,能让用户知道下一步该怎么做。
补充说明:后续接入持久化时,可以优先保存输入值、指标值、反馈文案和时间戳。
补充说明:当前页面保留了很短的操作路径,适合日常场景里快速完成一次记录。
补充说明:指标展示让绿色行动从抽象口号变成可见数字。
补充说明:状态文案承担了引导作用,能让用户知道下一步该怎么做。
补充说明:后续接入持久化时,可以优先保存输入值、指标值、反馈文案和时间戳。
补充说明:当前页面保留了很短的操作路径,适合日常场景里快速完成一次记录。
补充说明:指标展示让绿色行动从抽象口号变成可见数字。
补充说明:状态文案承担了引导作用,能让用户知道下一步该怎么做。
补充说明:后续接入持久化时,可以优先保存输入值、指标值、反馈文案和时间戳。
补充说明:当前页面保留了很短的操作路径,适合日常场景里快速完成一次记录。
补充说明:指标展示让绿色行动从抽象口号变成可见数字。
补充说明:状态文案承担了引导作用,能让用户知道下一步该怎么做。
补充说明:后续接入持久化时,可以优先保存输入值、指标值、反馈文案和时间戳。
补充说明:当前页面保留了很短的操作路径,适合日常场景里快速完成一次记录。
补充说明:指标展示让绿色行动从抽象口号变成可见数字。
补充说明:状态文案承担了引导作用,能让用户知道下一步该怎么做。
补充说明:后续接入持久化时,可以优先保存输入值、指标值、反馈文案和时间戳。
补充说明:当前页面保留了很短的操作路径,适合日常场景里快速完成一次记录。
补充说明:指标展示让绿色行动从抽象口号变成可见数字。
补充说明:状态文案承担了引导作用,能让用户知道下一步该怎么做。
补充说明:后续接入持久化时,可以优先保存输入值、指标值、反馈文案和时间戳。
补充说明:当前页面保留了很短的操作路径,适合日常场景里快速完成一次记录。
补充说明:指标展示让绿色行动从抽象口号变成可见数字。
补充说明:状态文案承担了引导作用,能让用户知道下一步该怎么做。
补充说明:后续接入持久化时,可以优先保存输入值、指标值、反馈文案和时间戳。
补充说明:当前页面保留了很短的操作路径,适合日常场景里快速完成一次记录。
补充说明:指标展示让绿色行动从抽象口号变成可见数字。
补充说明:状态文案承担了引导作用,能让用户知道下一步该怎么做。
补充说明:后续接入持久化时,可以优先保存输入值、指标值、反馈文案和时间戳。
补充说明:当前页面保留了很短的操作路径,适合日常场景里快速完成一次记录。
相关资源:
- HarmonyOS 开发者官网
- ArkTS 语言基础
- ArkUI 组件开发