Streak灵活排程完全指南:每日、每周、自定义星期与每N天打卡一次,哪个更适合你
Streak灵活排程完全指南:每日、每周、自定义星期与每N天打卡一次,哪个更适合你
Streak 是一款免费、开源、完全离线运行于手机和桌端的 Flutter 习惯打卡应用。它的排程功能支持每日、每周、每月、自定义星期与每 N 天等多种打卡节奏,帮你把"喝水、读书、健身"等习惯安排得恰到好处。本文带你完整了解 Streak 的 5 种排程方式、各自的适用场景,以及如何搭配休息日与连击(Streak)规则。
一、Streak 排程功能总览:5 种节奏一次看懂
打开任意习惯的编辑页,在「频率」区域会看到 5 个排程选项(对应源码中的 HabitInterval 枚举):
| 排程类型 | 中文标签 | 含义 | 典型场景 |
|---|---|---|---|
daily |
每日 | 每天都是打卡日 | 喝水、刷牙、冥想 |
weekly |
每周 | 一周内完成指定次数即可 | 每周运动 3 次 |
monthly |
每月 | 一月内完成指定次数即可 | 每月读 2 本书、每月记账 |
weekdays |
天数 | 只选特定星期几打卡 | 仅工作日健身 |
everyXDays |
间隔 | 每 N 天/周/月打卡一次 | 每 3 天浇花、每 2 周测体重 |
这 5 种选项的完整定义位于 habit.dart,排程选择界面(IntervalSelector)实现在 habit_form_schedule.dart。
二、每日打卡:最简单,也最容易断连击
每日模式无需任何额外设置,从今天起每一天都是打卡日。
连击规则:连击按"连续天数"计算,只要某一天完成,连击延续;漏掉一天(且不是休息/休假)则连击中断。这是最能培养肌肉记忆的节奏,适合所有"轻量级、高频次"的习惯。
💡 小提示:如果你希望某些星期几固定不打卡,可以配合后文提到的「休息日」功能,而不是改排程类型。
三、每周 N 次:给生活留点弹性
选择「每周」后,会出现一个步进器,让你设定 每周完成次数(1~6 次,默认 3 次)。
连击规则:只要一周内完成的次数达到设定值,就算这一"周"达标;连续的达标周构成连击,具体计数逻辑可参考 habit.dart 中的 _currentStreak 实现。
适用场景:每周跑步 3 次、每周冥想 2 次——"必须完成、但不必每天做"的习惯用它最舒服。
顺带一提:每月 N 次
「每月」与「每周」是姊妹模式,步进器范围为 每月 1~25 次(默认 10 次),连击按"连续的达标月"计算。适合阅读、大扫除、月结账单这类低频习惯。
四、自定义星期:锁定你的固定节奏
选择「天数」后,界面会出现一排星期按钮(周一到周日),点选哪些天,就只在哪几天打卡。
连击规则:连击只统计"排定日"——只有选中的星期几才算数,未选的日子自动跳过,不会打断连击。判断逻辑见 isScheduledOn。
适用场景:
- 只在工作日(周一~周五)通勤跑步;
- 只在周六周日做家庭大扫除;
- 周二、周四两次健身(隔天节奏 + 固定星期)。
五、每 N 天打卡:最灵活的自定义间隔
「间隔」模式是 Streak 排程中最强大的一种,包含 4 个设置项:
- 单位选择:天(2~90)、周(1~26)或月(1~24);
- 间隔数值:例如"每 3 天"、"每 2 周"、"每 2 个月";
- 起始日期(Starts on):设定第一个打卡日,之后的到期日按间隔推算,选择器实现见 ScheduleStartRow;
- 两个可选开关:
- 「从上次完成起算」:不固定日期,而是每次完成后重新计时 N 个单位。适合"想起来就做、做完算数"的弹性习惯;
- 「每月同一星期几」(仅月单位时出现):例如"每月第二个周六",自动适配 28 天或 31 天的月份。
连击规则:按"排定日是否满足"逐日回溯,并且支持"提前完成"——在到期日之前几天内完成,同样视为该周期达标(isCoveredOn)。
适用场景:每 3 天浇花、每 7 天换空调滤芯、每 3 个月体检、每 2 周打一次疫苗。
六、怎么选?一张表帮你决定
| 你的习惯 | 推荐排程 | 理由 |
|---|---|---|
| 喝水、刷牙、背单词 | 每日 | 高频轻量,需要每天都做 |
| 跑步、健身、撸铁 | 每周 N 次 | 有总量要求,但可挑日子 |
| 阅读、写作、记账 | 每月 N 次 | 低频,按月结算更自然 |
| 通勤锻炼、值班 | 自定义星期 | 只在固定星期几发生 |
| 浇花、体检、大扫除 | 每 N 天/周/月 | 按固定间隔周期发生 |
七、进阶:休息日、休假与排程的配合
- 休息日(Rest Days):在习惯详情中可为某些星期几标记休息,这些天不打卡也不会断连击,设置面板位于 vacation_sheet.dart。
- 休假(Vacation):设定一段连续日期为休假,期间所有未完成的排定日均视为"中性",连击无缝延续。
- 提醒联动:任何排程下都可以为该习惯添加提醒;对非排定日,提醒会智能静默(
silencesRemindersOn),避免"周六还提醒我周一的健身"。
八、排程如何影响你的数据
Streak 的强度(Strength)与一致性(Consistency)指标只统计排定日:90 天窗口内,越近的完成权重越高,休息与休假自动剔除。也就是说,选对排程 = 更真实的数据。相关规则集中在 habit.dart,排程与连击的完整测试用例可以阅读 scheduling_test.dart 与 schedule_start_test.dart。
总结
Streak 的 5 种排程覆盖了几乎所有习惯的节奏:每日建基础、每周 N 次留弹性、每月 N 次管低频、自定义星期锁节奏、每 N 天做周期。在 habit_form_page.dart 对应的频率区域,你随时可以切换类型——从今天起,给每个习惯挑一个最适合它的节奏,连击会替你说话。🔥



