选好今天的计划,专心训练,点一下记录每组。
SetTrace是一款轻量、离线优先的健身训练记录 App。它围绕“今天练什么 → 按计划训练 → 快速记录 → 查看历史”设计,让用户自由定义训练内容,并在训练中清楚知道当前组、下一动作和休息剩余时间。当前版本以 Android 为首要目标,核心功能无需账号、网络或后端服务。
- 自定义计划:创建、改名、删除多个训练计划;为计划添加任意名称的动作并拖动排序。
- 计划分享与备份:首页标题旁更多菜单可导入或导出计划。导出支持单选、多选和全选,可复制完整计划文本或直接保存到公共下载目录;文本与文件可预览后重新导入,同名创建副本,失败整批回滚。
- 配置动作:设置默认组数、组间休息、动作后休息,以及可选的默认重量。休息时间按 30 秒调整,重量仅作为训练提示。
- 逐组训练:进入训练准备页后开始;训练页展示当前动作、组数进度、下一动作和完整动作列表。每组只记录完成状态与完成时间,一次点击即可完成当前组。
- 本次动作换序:训练或休息时选择“更换下一动作”;在“全部动作与编辑”中打开“调整剩余顺序”,拖动后保存。只有零完成且零跳过组动作可移动,部分完成和已完成动作固定;取消不写入,只影响本次训练,原计划和下次训练不变。换序保持正在进行的休息截止时间。
- 休息与纠错:自动按配置进入组间或动作间休息,支持跳过、增减 30 秒、撤销上一组,以及修改本次训练后续的组数和休息配置。
- 休息结束提醒:组间和动作间休息自然到期时,前台短音提示,后台或锁屏发送本地通知。设置可关闭提醒;通知权限拒绝不影响训练,准时权限不足时说明可能延迟。加减时间同步更新,跳过、撤销或结束会使旧提醒失效。声音遵循系统静音、勿扰和通知渠道;不承诺强行停止、设备重启和厂商限制后的送达。
- 跳过剩余组:当前动作至少完成一组后,可在训练页或组间休息页确认跳过剩余组并直接进入下一动作。完成记录和本次目标保留,历史显示例如“2 / 4 组完成”。独立“撤销最近一次跳过”可恢复组,撤销上一组只撤销真实完成;含跳过组的动作先恢复跳过再修改配置。
- 可靠恢复:训练进度和休息截止时间保存在本机;切到后台或重启 App 后可继续未完成的训练。退出训练前会确认,已完成的部分可保存为记录。
- 历史与统计:按日期查看训练和详情;显示本周、本月训练次数、最近一次训练,以及月度时长和完成组数。历史使用当次训练的快照,不受后来修改或删除计划的影响。
- 中英文界面:设置中按 English、中文排列,即时切换并记住选择;首次按系统首选语言初始化,中文变体使用简体中文,其他未支持语言使用英文。
- 浅色与深色主题:支持跟随系统、浅色、深色三种模式,并记住选择。
首次安装或旧版升级后尚无语言偏好时,应用在首屏前按系统的第一首选语言匹配语言包,兼容同语言的地区/脚本变体;未支持首选即使第二偏好为中文也默认英文。第一次解析结果保存,之后系统语言变化不覆盖手动选择。设置只有各语言自称的单选,保存失败保留原选择并允许重试。切换保留主题、页面、草稿和训练进度;用户名称与历史不翻译。桌面名固定为 SetTrace。
正式语言由 ARB 包产生,当前只有英文和简体中文;未来增加官方支持的 LTR 语言只需补齐语言包、生成和构建。维护与质量检查见 语言包说明。
- 在“计划”中新建训练计划,添加动作并设置组数和休息时间。
- 打开计划详情,在准备页确认动作顺序后开始训练。
- 每完成一组点击“完成本组”;休息倒计时结束后继续下一组或下一动作。
- 器械被占用时选择“更换下一动作”,或在完整动作列表中调整待练顺序。当前动作已有完成组时继续完成它,或明确跳过剩余组,再按新顺序训练。
- 状态不佳时选择“跳过剩余 N 组”,确认后进入下一动作;需要恢复时使用独立的撤销跳过。
- 没有待练组时确认结束保存。即使流程已结束,实际完成进度也可能不足 100%;历史和统计只计实际做完的组。
- 在首页“训练计划”标题旁打开更多菜单,选择“导出计划”。
- 默认选中全部计划;按需单选、多选,选择“复制到剪贴板”或“导出到文件”。文件直接保存在系统公共下载目录,提示实际文件名,重名时保留旧文件。
- 恢复或接收分享时选择“导入计划”,粘贴原计划文本或从本地文件选择。
- 预览计划及动作配置,可修改计划名称;同名自动创建副本。确认后一次性保存,取消不保存。
备份仅包含计划配置,不含训练历史、进行中的训练或主题设置。卸载前导出文件可在重装后继续导入。SQLite 是唯一实时数据源,JSON 在导出时生成,旧文件不会随编辑自动更新。格式及限制见 传输格式说明。Android 9 及更早版本导出文件时需要下载目录写入权限;拒绝后仍可复制文本。
项目使用 Flutter / Dart 开发 Android App。界面按语义色 Token 实现浅色和深色主题;计划、会话与历史保存在设备上的 SQLite 数据库中,主题和语言选择保存在 shared_preferences 中。
开始训练时,App 会复制计划和动作配置,形成独立的本次训练快照。每次完成、撤销、保存排序或编辑训练进度后都会持久化;休息剩余时间由保存的绝对截止时间计算。数据库 v3 的表和时间单位见 本地数据库说明。
当前版本只在 Android 上完成运行验收。Flutter 项目保留跨平台扩展空间,但其他平台尚未作为交付目标。
首次打开(包括旧用户首次升级到支持该说明的版本)会介绍 SetTrace 的用途、隐私和备份范围;确认已阅后普通重启与升级不再重复。设置底部“关于 SetTrace”显示实际安装版本/构建号、项目主页、问题反馈、隐私与数据说明和离线第三方许可。说明可随时重看。
Android 正式发布包不申请联网权限,不主动收集或上传个人信息与使用数据。点击项目/反馈链接时由外部浏览器访问网络。用户可自由手动导入、导出计划;应用不额外限制 Android 系统备份或设备迁移,具体行为由用户的系统设置与平台能力决定。卸载或清除数据会移除当前安装中的本地数据,不代表系统备份或其他外部副本已删除,也不承诺重装后不会由系统恢复。公共下载目录的已导出计划文件仍保留;手动计划导入只新增文件所含的计划配置,不含历史或活动会话。
实施验证与平台限制见 关于与首次说明验收。
Windows 的固定 D 盘路径、手动安装组件清单和缓存/临时目录设置见 Windows 开发环境说明。先按说明准备环境,再执行下面的命令;项目不会自动迁移旧工具。
准备好 Flutter SDK、Android SDK 和可用的 Android 模拟器或设备后,在项目根目录执行:
flutter pub get
flutter devices
flutter run常用检查与构建命令:
dart run tool/check_localizations.dart
flutter gen-l10n
flutter analyze
flutter test
flutter build apk --debugDebug APK 输出在 build/app/outputs/flutter-apk/app-debug.apk。Android 工程使用 android/app/build.gradle.kts 中指定的 NDK 版本;首次构建时请确保 Android SDK 能安装该版本。
lib/
├── app/ # 应用入口导航、主题
├── core/database/ # SQLite 建库与迁移
├── core/widgets/ # 跨页面共用控件
└── features/
├── plans/ # 计划与动作管理
├── workout/ # 训练会话与休息
├── history/ # 历史记录与统计
└── settings/ # 主题设置
test/ # 数据库、训练逻辑与 Widget 测试
docs/design/ # UI 设计说明和参考图
docs/qa/ # Android MVP 验收记录
openspec/specs/ # 当前能力规格
openspec/changes/archive/ # 已完成的 OpenSpec 变更
- 当前设计入口、离线 UI 图册
- 视觉与组件规范、页面与状态、交互规范、验收标准
- 正式 Logo 与图标母版;
tool/generate_android_icons.py读取该目录,重新生成需 Python 3 与 Pillow。 - 构建身份与截图清单、覆盖与待验
- 旧设计、模拟原型与工作稿归档
- 计划导入导出验收记录
- 本次动作排序验收记录
- 休息提醒和剩余组跳过、验收记录
- Android MVP 验收记录
- OpenSpec 能力规格
当前参考对应源码 306b9bc、应用 0.3.1+12 的独立 release 构建,整合 focus-a-2026-10-14 与后续已实施增量。图册明确区分 Android 模拟器原帧、受控 Widget 测试渲染和未验条件;历史 HTML/SVG 仅为来源,不代表当前实装。业务规格与运行资源保持原样。
本次资料整理已获得用户授权。Git 提交、发布及 OpenSpec 归档仍需各自授权;设计文档或已有 change 目录本身不代表新增工作授权。
训练本专注本机训练记录。当前版本没有登录、云同步、社区、课程、AI 推荐、饮食管理、穿戴设备接入。卸载 App 或清除应用数据会移除本地记录;训练计划可通过剪贴板分享或导出到公共下载目录备份;历史与进行中的训练尚不包含在备份中。