一、项目背景 专为宠物服务公司定制开发的宠物管理工具,聚焦宠物日常护理、提醒、打卡与数据统计全流程管理。 二、项目核心目标 帮助宠物主人 / 服务人员标准化、可视化完成宠物全流程护理服务,实现提醒自动化、操作便捷化、数据可追溯。 三、全流程阶段详解 1. 应用启动与初始化 流程用户打开应用 → Index.ets 执行初始化 → 检查 / 申请通知权限 → 初始化数据库(DatabaseHelper)→ 加载宠物、闹钟数据(PetDataManager/AlarmDataManager)→ 根据权限状态显示引导页 → 进入主导航界面(topBar)目的保证闹钟通知等核心功能正常可用,完整恢复用户数据与应用状态。 2. 宠物信息管理 核心流程 • 新增宠物:进入 addPet 页面 → 填写昵称、头像、性别、生日、体重、分类 → 通过 PetDataManager 存入数据库 • 宠物管理:SelectPet 页面支持宠物选择、切换、删除、设置默认宠物 特色功能PetCategory 页面:支持自定义一级 + 二级宠物品种分类树数据价值PetData 是全应用打卡、闹钟、统计等功能的基础数据。 3. 护理提醒设置 支持两类提醒,统一由系统通知触发 ① 今日重复闹钟(SetAlarmForToday)选择宠物 → 设置喂养频率 → 添加喂食 / 喝水等护理时间点 → 保存由 AlarmDataManager 统一管理存储② 未来单次事件(SetAlarmForFuture)为宠物添加驱虫、疫苗等一次性未来事件提醒通知联动闹钟由 AlarmReminderManager 调度 → 通过 NotificationManager 触发系统通知 4. 每日打卡执行 流程TcfPet 页面查看当前宠物 → 对喂食 / 喝水 / 驱虫等按钮(StatusButtonV2)执行打卡 → 填写备注 → 由 PetCheckInManager 保存记录 特色功能 • 支持补签模式(isMakeUpMode),可补录历史打卡 • 打卡成功提供动画反馈(PetAnimation) 5. 数据统计与可视化 流程PetDataView 页面选择宠物 + 视图类型(日 / 周)→ 拉取打卡记录(PetCheckInManager)+ 未来事件(AlarmDataManager)→ 自动计算生成图表与总结 输出内容 • 日维度柱状图、周维度趋势图 • 喂食总量、平均次数、未打卡天数、近期要事提醒 • 可视化周报数据 6. 成果分享 流程PetDataView / ShareButtonComponent 触发分享 → 跳转 ShareImagePage → Canvas 合成周报图片 → 保存相册 / 分享好友关键技术使用 Canvas 实现图片合成,申请媒体读
应用结构:
pages/screens/ # 主要页面
├── TcfPet.ets # 主照顾页面
├── addPet.ets # 添加/编辑宠物
├── SelectPet.ets # 宠物选择器
├── SetAlarmForToday.ets # 今日闹钟
├── SetAlarmForFuture.ets# 未来闹钟
├── PetDataView.ets # 数据统计
└── PetCategory.ets # 宠物分类管理
componentCase/ # 可复用UI组件
├── PetAvatarView.ets # 宠物头像组件
├── topBar.ets # 顶部导航栏
├── StatusButton
坑:
1.componentv1父子组件通信逻辑复杂,但代码上无法结构化,代码重复度高,在类似list的高相似度内容开发的时候,代码无法有效复用,1.componentv2则没有这个烦恼,但个别控件不支持v2,比如代理提醒的功能,必须用v1.
2.子组件打开的窗口受到父组件的限制,无法完整显示在屏幕上,设置背景的时候也无法超越父组件的区域.
3.卡片进程与主进程是分离的,卡片进程可以唤醒主进程,但第一次唤醒后无法有效传递信息,需要区分冷启动和热启动,冷启动需要主动在主进程中处理want传递过来的信息,而热启动则可以直接使用on事件监听.
4.处理音频文件播放的时候,不能用previewer测试,previewer无法设置有效的on监听,必须要真机或者配置模拟器才行.
5.代理提醒功能限制的很厉害,里面的按钮与内容展示都是固定的,无法自主定制,代理提醒几乎无法与卡片进行交互.
6.卡片进行的生命周期极短,大部分的数据处理都要唤醒主进程才能完成.
7.scroll组件的内容必须由其他组件包裹,否则布局会起飞.scroll的内容默认是居中的,如果不知道这个,会发现如果内容布局不足铺满屏幕,那么内容都会堆在中部.
8.应用主进程与卡片进程有着天然隔离,各自生成的首选项即使文件名一样,也不是同一文件,需要使用相同的工具类单独创建文件,才能完成数据交互.
9.代理提醒是系统级权限,只需要在配置文件中写明,就可以,不需要向用户发送主动请求;但代理提醒需要向用户请求打开通知,才可以正常发送通知,而且如果需要横幅框,主动请求都无法完成,必须要主动引导用户手动打开.
10.微信的朋友圈和支付功能,必须向腾讯申请UID,而这个UID的申请,要求必须有应用的正式网站,而且正式网站需要公安备案.如果要使用华为支付,就没那么多要求,但如果要用华为支付使用微信,要就要同时申请两家的的权限,过程会更加麻烦.