我们构建了一个宠物用药追踪器,因为其他所有应用都让我们失望

发布: (2026年3月4日 GMT+8 10:13)
6 分钟阅读
原文: Dev.to

Source: Dev.to

去年,我和伴侣领养了一只狗 🐶,随之而来的是满满的爱……以及大量的责任。
我最初尝试使用 Google Calendar,但工作会议、生日和宠物提醒全都混在一起。
在测试了多个宠物护理应用后——有的设计过度,有的缺少通知——我们决定自行构建真正需要的工具。

ZooMinder: 它的功能

  • Multiple pets – 为每只宠物添加照片和出生日期。
  • Treatments & medications – 记录剂量、频率(每日、每周、自定义间隔)以及特定时间的用药。
  • Vet appointments – 将诊所信息、兽医姓名、电话和地址集中存储。
  • Upcoming doses – 清晰显示所有宠物的下次用药时间线。
  • History – 为每只宠物提供完整的过去用药和预约时间线。
  • Local notifications – 自定义的“汪汪”声音提醒,即使在应用关闭时也会触发。
  • Offline‑first – 无需网络即可使用;恢复联网后数据会同步到云端。

技术栈

技术
框架Flutter (Dart 3.10+)
本地数据库SQLite via sqflite
后端与认证Supabase
通知flutter_local_notifications + custom sound
导航go_router
国际化 (i18n)Flutter’s intl (English + Spanish)
应用内购买in_app_purchase
同步Custom offline‑first sync service

离线优先同步

应用程序首先将所有数据本地存储在 SQLite 中。每条记录都有一个 synced 标志。当设备重新获得连接时,SyncService 会将未同步的记录推送到 Supabase,并拉取远程更改,使用时间戳 (updated_at) 解决冲突。

// Every model carries its sync state
class Treatment {
  final bool synced;
  final DateTime updatedAt;
  // …
}

这种设计使得应用可以在飞机上、农村地区或任何没有信号的地方运行——你的宠物日程永远不依赖于 Wi‑Fi。

通知

为药物和预约专门创建了 Android 通知渠道,每个渠道都使用自定义声音。服务会为每个治疗计划安排最多三个即将到来的通知,并在添加或修改治疗计划时重新计算。

static const _medicationChannel = AndroidNotificationChannel(
  'medication_reminders_v2',
  'Medication Reminders',
  importance: Importance.high,
  sound: _customSound,
  playSound: true,
);

教训

  • 离线优先值得但很痛苦 – 同步逻辑及冲突解决花费的时间比所有 UI 加起来还多,但用户体验的回报巨大。
  • 通知是雷区 – Android 权限模型、电池优化和时区处理,使得即使是一个简单的上午 8 点每日提醒也异常复杂。
  • 范围蔓延是真实存在的 – 最初的“记录药物”功能演变成预约管理、剂量历史时间线、兽医诊所存储、付费订阅以及多语言支持。学会对功能说“不”至关重要。
  • 家庭项目让你保持诚实 – 当你的共同开发者也是你的伴侣和首位用户时,反馈既即时又毫不留情。 😄

接下来 🚀

  • Family plans – 在家庭成员之间共享宠物信息,让每个人都能用自己的账户跟踪药物和预约。
  • Assign responsibilities – 分配任务(例如,妈妈负责早晨剂量,爸爸负责晚上剂量),让每个人都清楚自己的角色。
  • Vet‑oriented tools – 让兽医能够在 ZooMinder 内直接共享治疗方案和就诊摘要,促进与宠物主人之间的更好沟通。

可用性

ZooMinder 可在 Google Play 商店 获取。如果您有宠物并且难以跟踪它们的药物和兽医就诊,请尝试一下。

贡献与反馈

我们非常期待您的反馈。如果您是 Flutter 开发者,欢迎随时聊聊我们使用的离线优先模式。
发现了 bug、有什么建议,或想成为测试员?请在 dev.to 给我私信。作为感谢,我可以为您提供该应用的高级版完整访问权限。

![Dog picture placeholder]

#flutter #flutterdev #dart #mobiledev #android #sideproject #indiedev

使用 Flutter、Supabase 构建,键盘上沾满了大量狗毛。

祝您有美好的一天! 👋🐾

0 浏览
Back to Blog

相关文章

阅读更多 »