给孩子辅导口算时,我翻了一圈应用市场:不是开屏广告糊脸,就是要注册登录、要联网、要各种权限。我想要的其实很简单——打开就练、数据只在自己手机里、没有任何广告和弹窗。于是自己做了一个,叫「口算题卡」。
口算练习本身不复杂,复杂的是围绕它的那些东西。作为家长,我不希望孩子在练题的时候被推荐、被打断、被引导去点别的地方;作为开发者,我也不想为了一个纯本地的小工具去收集任何用户数据。
所以「口算题卡」从第一行代码就定了两条底线:不联网、不申请任何系统权限。整个应用离线运行,练习记录、错题、统计全部只写进本机数据库。
很多"离线"应用其实还是会申请网络权限以备后用。口算题卡的 module.json5 里一条 requestPermissions 都没有——没有网络、定位、通讯录、相机、麦克风、存储。技术上它就无法联网上传,隐私也就无从谈起。
唯一涉及"文件"的功能是导出题卷:生成的 PDF 只在你主动点击分享时,经 HarmonyOS 系统分享面板交给你自己选择的目标应用(打印、存文件、发给别人),应用本身不碰你的其它文件。
上架前调试,发现「我的」页做完一次练习后,统计卡片的数字不更新——练习次数还停在旧值,但同页的题型正确率、练习记录列表却是新的。
原因藏在 ArkUI 的一个细节里:那四张卡片当时是用带参数的 @Builder 渲染的,而按值传参的 @Builder,在依赖的状态变量变化时并不会重新渲染;用 ForEach 直接引用状态的列表则会。于是"列表更新、卡片不更新"。
@Builder 换成独立的 @Component,用 @Prop 接收数值。父组件重渲染时新值经 @Prop 同步进子组件,卡片就会跟着刷新。小细节,但很典型。「口算题卡」适合家长陪练、老师快速出卷、学生自测查漏。纯离线、无广告、无内购、无账号,装上就能用。
HarmonyOS · 手机 / 平板 / PC · 2in1 全适配 · 华为应用市场已上架。