BikeControl (SwiftControl)
使用 Zwift Click、Zwift Play、Shimano Di2 或任何藍牙控制器,搭配 MyWhoosh、Rouvy、Zwift 等。iOS、Android、Windows、macOS 均可免費試用。
AI 翻译
Free, open-source interval timers for Android and the web
翻译准备中
正在加载完整 README。
查看完整 README ↗Free, open-source interval timers for Android and the web. No ads, no account, no tracking. Works offline.
The classic protocol — 20 s of work, 10 s of rest, 8 rounds — with every number adjustable.
Web · APK preview · RuStore
Interval walking: 3 minutes fast, 3 minutes slow, 5 times — a 30-minute session. On Android, plays your own music for each pace and keeps going with the screen off.
Both apps speak English and Russian, play a sound when the phase changes, keep the screen on while the timer runs and come in a light and a dark theme that follows the phone until you pick one. Phase changes also tap back with a vibration you can turn down or off in the settings.
APK preview links point to test builds of the latest main. They install next to the store versions as separate "Preview" apps and update each other.
The two apps are separate products with their own store listings, but they share almost everything underneath:
flowchart LR
core["interval_core<br><sub>pure Dart engine</sub>"] --> kit["interval_kit<br><sub>theme · widgets · cues · app shell</sub>"]
kit --> tabata["apps/tabata"]
kit --> media["interval_media<br><sub>music · media session</sub>"]
media --> walking["apps/walking"]
testing["interval_testing<br><sub>test helpers</sub>"] -.-> tabata
testing -.-> walking
| Path | Contents |
|---|---|
packages/interval_core | The workout engine: plans, phases and a timer that never drifts. Pure Dart, no Flutter. |
packages/interval_kit | Everything the apps share on screen: theme, widgets, sound cues, the workout screen and the app shell. |
packages/interval_media | Music per pace with cross-fades, and the media session that keeps a workout running with the screen off. Only the walking app uses it. |
packages/interval_testing | Helpers for widget tests and README screenshots. |
apps/tabata | The Tabata timer. Settings and phase names only. |
apps/walking | The Japanese walking timer. Settings, phase names and the music screens. |
A fix in the engine or a widget lands in both apps with the next build. Read more in the architecture notes.
You need Flutter 3.47 — the exact version is pinned in pubspec.yaml — and, for Android builds, the Android SDK.
git clone https://github.com/manul-wizard/interval-apps.git
cd interval-apps
flutter pub get # resolves the whole workspace at once
cd apps/tabata # or apps/walking
flutter run -d chrome # or pick an Android device
| Task | Command |
|---|---|
| Format | dart format . |
| Analyze everything | flutter analyze |
| Test the engine | cd packages/interval_core && dart test |
| Test a Flutter package or app | cd <dir> && flutter test |
| Regenerate screenshots | cd apps/<app> && flutter test --tags screenshots --run-skipped |
| Regenerate launcher icons | cd apps/<app> && dart run flutter_launcher_icons |
| Build a release | cd apps/<app> && flutter build apk / flutter build web |
CI runs the same checks on every pull request; see CONTRIBUTING.md for the workflow.
The Tabata timer started as a Unity project. It was rewritten in Flutter to get a much smaller app, a faster web version and native audio features the walking app needs. The design, sounds and settings carried over unchanged.
Bug reports, ideas and pull requests are welcome — start with CONTRIBUTING.md. Please follow the code of conduct, and report security issues privately as described in SECURITY.md.
Sounds come from Freesound and the font is Ubuntu; authors and licenses are listed in CREDITS.md.
The code is licensed under the Apache License 2.0.