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

195 lines
9.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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. 设计原则
| 原则 | 说明 |
|------|------|
| **极简优先** | 默认只显示标题和日历,高级选项折叠隐藏 |
| **即时反馈** | 每次打卡有视觉(颜色变化)和听觉(音效)反馈 |
| **正向强化** | 奖励通知优先于惩罚通知,连续天数优先于失败天数 |
| **零配置可用** | 安装后即可使用,不需要注册、登录或网络 |
| **用户控制** | 所有数据可导出、可删除,用户完全掌控 |