Files
habo/docs/01-REQUIREMENTS.md
dazhuang aa69f2a91e feat: initial commit - Habo habit tracking app
- Complete MVP with Repository Pattern, SQLite storage
- Provider + ChangeNotifier state management
- Navigation 2.0 with deep link support
- Habit CRUD with twoDayRule, notifications, categories
- Backup/Restore via JSON
- Statistics with streak tracking
- Material You theme support
- Biometric lock support
- Desktop widget support
- 27 languages i18n structure
- Comprehensive test suite (87/89 passing)
2026-04-13 15:02:30 +00:00

9.4 KiB
Raw Permalink Blame History

Habo 需求分析文档

版本: 3.1.2 | 最后更新: 2026-04-13


1. 项目定位

1.1 产品定义

Habo 是一款极简主义的习惯追踪应用,帮助用户通过每日打卡、进度可视化和心理模型引导,建立并维持长期习惯。

1.2 解决的核心问题

痛点 描述
习惯难以坚持 人们制定了计划但缺乏日常反馈机制,几天后放弃
缺乏正向激励 完成习惯后没有即时奖励感,大脑无法建立正向反馈回路
数据孤岛 习惯数据存储在云端,依赖网络,存在隐私顾虑
功能过度 现有习惯类 App 功能繁杂,设置成本高,反而降低使用意愿
缺乏科学方法 用户不了解习惯形成的心理学原理,只靠意志力

1.3 目标用户画像

画像 特征 核心需求
自律建设者 想建立新习惯(运动、阅读、冥想)但经常中断的成年人 简单打卡 + 可视化连续天数
数据驱动型 喜欢用数据量化自我、追踪进步的用户 统计图表 + 导出功能
隐私敏感型 不信任云服务,希望所有数据留在本地的用户 纯本地存储 + 本地备份
多设备用户 在手机、平板、桌面端都需要使用 跨平台支持Android/iOS/macOS/Linux

1.4 差异化定位

与 Habitica、Streaks、Loop 等竞品相比Habo 的核心差异化:

  • 极简设计 — 无社交、无游戏化、无广告,聚焦习惯本身
  • 心理学模型内置 — Cue-Routine-Reward 习惯循环、两天法则、习惯合约(惩罚/问责伙伴)
  • 纯本地架构 — 零网络依赖,数据完全由用户掌控
  • 跨平台开源 — Flutter 实现的真正跨平台体验
  • 数值型习惯 — 不仅支持"做了/没做",还支持"做了多少"(如跑步 5km、喝水 8 杯)

2. 功能需求

2.1 功能矩阵

P0 — 核心功能MVP 必须)

ID 功能 描述
F01 习惯创建 创建新习惯,设置标题和基础配置
F02 每日打卡 日历视图中对每一天标记状态:完成 / 失败 / 跳过
F03 日历视图 月度日历展示,每天显示对应的打卡状态标记
F04 连续天数 计算并展示当前连续完成天数和最高连续记录
F05 习惯列表 展示所有活跃习惯,支持拖拽排序
F06 编辑/删除 编辑习惯属性或永久删除
F07 持久化存储 所有数据本地 SQLite 存储,关闭应用不丢失
F08 浅色/深色主题 跟随系统或手动切换浅色/深色主题

P1 — 重要功能

ID 功能 描述
F09 两天法则 允许用户启用"两天法则"——允许间隔一天失败而不打断连续天数
F10 习惯循环 (Cue-Routine-Reward) 基于《原子习惯》的习惯循环模型,设置提示、例行、奖励
F11 习惯合约 设置惩罚和问责伙伴,失败时显示惩罚提醒
F12 统计总览 饼图展示所有习惯的整体完成率分布
F13 个人统计 每个习惯的详细统计:最高连续、当前连续、月度柱状图
F14 数值型习惯 支持设置目标值和单位的习惯类型(如 10000 步)
F15 进度追踪 数值型习惯可以记录部分进度,不要求一次性完成
F16 分类系统 习惯可归属多个分类,支持按分类筛选显示
F17 通知提醒 每日定时提醒用户打卡
F18 备份/恢复 导出/导入 JSON 备份文件,支持跨设备数据迁移
F19 引导页 首次使用时展示三步引导(定义习惯 → 记录天数 → 观察进步)
F20 归档功能 将不再追踪的习惯归档而非删除,保留历史数据
F21 音效反馈 打卡时播放音效,增强即时满足感
F22 备注/日记 每日打卡时可添加文字备注

P2 — 增强功能

ID 功能 描述
F23 Material You 主题 Android 12+ 动态取色主题
F24 OLED 黑色主题 纯黑背景,适配 OLED 屏幕省电
F25 自定义颜色 用户可自定义完成、失败、跳过、进度的颜色
F26 生物识别锁 指纹/面容锁定应用,保护隐私
F27 桌面小组件 iOS/Android 主屏幕小组件显示今日完成进度
F28 一键打卡 无需打开菜单,单击直接标记完成
F29 深度链接 支持 habo:// URL scheme 跳转到指定页面
F30 周起始日设置 用户可选择周日或周一作为日历的起始日
F31 显示月份名称 可选在日历中显示月份名称
F32 27 种语言 支持中英日韩等 27 种语言的完整界面翻译

2.2 功能依赖关系

F01 (创建) ──→ F02 (打卡) ──→ F04 (连续天数)
     │              │
     │              ├──→ F12 (统计总览)
     │              └──→ F13 (个人统计)
     │
     ├──→ F03 (日历视图)
     ├──→ F05 (列表) ──→ F16 (分类)
     ├──→ F06 (编辑/删除)
     ├──→ F10 (习惯循环) ──→ F11 (习惯合约)
     ├──→ F14 (数值型) ──→ F15 (进度追踪)
     └──→ F20 (归档)

3. 非功能性需求

3.1 平台支持

平台 最低版本 说明
Android API 21 (Android 5.0) 支持 split-per-abi APK 分包
iOS 12.0+ 完整功能
Linux - 通过 sqflite_common_ffi 支持
macOS - 原生窗口管理

3.2 性能要求

指标 要求
启动时间 冷启动 < 2 秒(含 splash screen
日历切换 月份切换流畅 60fps无明显卡顿
数据容量 支持至少 100 个习惯 × 365 天的事件记录
备份文件 支持 10MB 以内的备份文件导入
内存占用 日常使用 < 100MB RAM

3.3 安全与隐私

要求 实现方式
数据不离开设备 纯 SQLite 本地存储,无网络请求
生物识别保护 通过 local_auth 调用系统指纹/面容识别
备份文件控制 用户手动导出/导入,应用不自动上传
无第三方分析 不集成 Google Analytics、Firebase 等追踪服务

3.4 可访问性

要求 说明
Material Design 规范 遵循 Material Design 无障碍指南
高对比度 深色/OLED 主题提供高对比度
大字体支持 响应系统字体缩放设置
语义化标签 Flutter Semantics 为屏幕阅读器提供语义信息

4. 用户故事

4.1 核心用户故事

编号 用户故事 验收标准
US01 作为用户,我想快速创建一个新习惯,以便开始追踪 输入标题 → 点击保存 → 习惯出现在列表中
US02 作为用户,我想在日历上点击某天标记完成,以便记录我的每日进度 点击日期 → 选择"完成" → 日历显示绿色标记
US03 作为用户,我想看到当前连续天数,以便获得坚持的动力 连续 2 天以上完成时显示绿色连续天数徽章
US04 作为用户,我想查看月度统计图表,以便了解长期趋势 统计页显示柱状图,可切换年份和事件类型
US05 作为用户,我想导出数据备份,以便在更换设备时迁移数据 设置页点击备份 → 生成 JSON 文件 → 保存到文件系统
US06 作为用户,我想设置每日提醒通知,以便不忘记打卡 设置通知时间 → 每天定时收到通知
US07 作为用户,我想追踪数值型目标(如每天 8 杯水),以便记录部分完成 创建数值习惯 → 输入进度值 → 查看百分比完成度
US08 作为用户,我想启用两天法则,以便在偶尔失败时不中断连续记录 开启两天法则 → 失败一天后次日完成 → 连续天数不中断
US09 作为用户,我想用分类管理习惯,以便快速筛选查看 创建分类 → 习惯关联分类 → 按分类筛选列表
US10 作为用户,我想归档不再追踪的习惯,以便保持列表整洁但不丢失历史 点击归档 → 习惯从主列表消失 → 可在归档列表中查看

4.2 边界场景

场景 期望行为
用户 31 天没有任何事件记录 连续天数显示为 0无徽章
用户连续完成 100 天 连续天数正确显示 100
用户在两天法则下连续两天失败 连续天数归零
数值习惯进度超过目标值 标记为已完成,进度条满格
备份文件格式错误 显示错误提示,不覆盖现有数据
应用从后台恢复且已启用生物识别 弹出认证对话框,认证失败可重试
跨午夜使用应用23:59 → 00:01 自动检测日变化,刷新日历视图
空标题尝试保存 显示错误提示"The habit title cannot be empty"

5. 设计原则

原则 说明
极简优先 默认只显示标题和日历,高级选项折叠隐藏
即时反馈 每次打卡有视觉(颜色变化)和听觉(音效)反馈
正向强化 奖励通知优先于惩罚通知,连续天数优先于失败天数
零配置可用 安装后即可使用,不需要注册、登录或网络
用户控制 所有数据可导出、可删除,用户完全掌控