鸿蒙记账本项目笔记
记账本项目简介
项目名称:BH_NoteBook(记账本)
项目作者:薛博璇
项目开源地址:https://github.com/XBXyftx/BH\_NoteBook
项目简介:一款界面清新可爱的记账本软件,支持分事件类型的支出收入记账。
开发笔记
基本结构:
整体分为两个页面,首页和记账页。
工程结构在原有stagestage模型上新增components和data文件夹。
components
该文件夹存储的是各个核心页面组件,利于进行数据解耦。
data
该文件夹中存储的是工具接口和数据。在BillData文件中定义了每个账单事件的工具接口BillItem,其中包括了四个属性。
1 | // 订单 |
这四个属性分别代表了账单的id,收入或是支出,金额数量以及具体的账单类型。
针对于账单类型,BillData文件利用const定义了两个个常量对象数组,用于定义一些常见的支出收入类型,供用户选择。
1 | // 支出的类型分类 |
支出收入高亮切换
1 | @State billType:BillType = BillType.Pay |
设置标志性状态变量,配合三元运算符实现
切换账单类型渲染
在添加新账单时会选择账单所属的支出或收入类型,而每类账单类型又有许多子类,所以在渲染类型列表时采用双重ForEach来进行渲染,而每个大类的子类数量不一,所以采用flex组件来实现弹性布局,自动换行。
每个类型的显示都是由一个图片和一个字符串组成,所以将其封装为自定义组件IconCom,通过将带渲染对象传入来进行渲染。同时根据selectedID标识符来切换选中状态。
1 | // 订单 |
持久化
1 | PersistentStorage.persistProp<BillItem[]>('list',[]) |
添加账单
在添加按钮绑定点击事件,判断金额是否为0防止错账出现。若金额正常则获取AppStorage中的帐单列表索引,利用unshift内置函数来将新账单插入到数组表头。
1 | export function addItem(item:BillItem){ |
而由于在页面的状态变量inputNum处只获取到了对应Item的id索引所以还需要一个函数来处理索引到Item对象的转换。
1 | export function getSelectedItemById(index:number){ |
getSelectedItemById函数的返回值是UseForItem|null的联合类型,所以此处要使用!进行非空断言。
在后续开发中我意识到账单金额存在正负数问题,用户很可能不会正确的按照正负数来进行输入,为防止存入的数据发生错误导致数据失真,这里针对于点击事件进行修改。无视用户所输入的正负号,直接根据当前账单类型billType来对用户输入数字的绝对值添加正负号。
1 | .onClick(()=>{ |
金额判定bug
而在实际测试时发现虽然inputNum的类型设置成number时可以顺利的实现与TextInput组件的双向绑定,但在输入框输入内容又删除后,addItem函数无法正确判断钱的数值是否为0,所以又将inputNum的类型改回了string。对应的点击事件也进行了微调。
同时更改了事件id的命名格式。
1 | .onClick(()=>{ |
金额统计
在首页最上方会统计全部的账单信息并给出支出和收入的金额数字。所以这里定义三个函数来获取收入支出以及余额。
1 | export function getPaySumNum():number{ |
删除订单
利用ListItem组件的swipeAction属性来实现滑动账单组件拉出删除按钮来进行账单的删除操作。
定义函数deleteItem用于处理删除事件,直接通过id进行筛选删除即可。
1 | export function deleteItem(id: number) { |