A precision timing challenge game built with Flutter. Test your internal clock — set a target time, start the timer, and try to stop it at exactly the right moment.
- Set any target time from 0.5 s up to 99 s with centisecond precision
- Quick-adjust buttons (±5 s, ±10 s) and preset chips for common durations
- Hidden-timer mode — stop by feel alone, no display to cheat with
- Exponential scoring and result feedback (how early/late you were)
- Turn-based play with player name setup and drag-to-reorder
- Choose a time range (short/medium/long) and difficulty (Easy → Expert)
- All players in a round share the same target — a new target generates each round
- Per-turn score cards and a final ranked scoreboard with round-by-round bars
- Dark, minimal UI with Orbitron (digits) and Exo 2 (text) from Google Fonts
- Show/hide timer toggle in Settings
- Persistent settings via SharedPreferences
- Android 13+ predictive back gesture support
| Layer | Library |
|---|---|
| State management | Riverpod (hooks_riverpod) |
| UI hooks | flutter_hooks |
| Fonts | google_fonts |
| Persistence | shared_preferences |
- Flutter SDK ≥ 3.5.0
- Android SDK / Xcode for mobile targets
flutter pub get
flutter runflutter build apk --releaselib/
├── app.dart
├── main.dart
├── core/
│ ├── constants/ # Game constants (ranges, difficulty, scoring)
│ ├── theme/ # Colors, text styles
│ └── utils/ # Time formatting, score calculation
├── features/
│ ├── home/ # Home screen
│ ├── settings/ # Settings page + provider
│ ├── single_player/ # SP game state, provider, page
│ └── multiplayer/ # MP game state, provider, setup/game/scoreboard pages
└── shared/
└── widgets/ # GradientButton, TimerDisplay
Single Player
- Set your target time on the setup screen and tap I'M READY.
- On the ready screen, tap the circular START button — the timer begins.
- Tap STOP when you think the target time has elapsed.
- See how close you were and your score out of 1000.
Multiplayer
- Add players, choose a time range, difficulty, and number of rounds.
- Each player takes a turn: confirm with I'M READY, then tap START.
- After every player in a round finishes, a new target is generated.
- The player with the highest total score wins.
This project is licensed under the MIT License — see LICENSE for details.