- Dart 99.5%
- Python 0.5%
| android | ||
| assets | ||
| branding | ||
| lib | ||
| test | ||
| tool | ||
| .gitignore | ||
| .metadata | ||
| analysis_options.yaml | ||
| pubspec.lock | ||
| pubspec.yaml | ||
| README.md | ||
BagDrill
Heavy-bag workouts for boxing, kickboxing and Muay Thai. The app runs rounds, calls out combos by voice and shows each strike with a simple animated figure. Android first, written in Flutter.
Run
flutter pub get
flutter run # on a connected Android phone or emulator
flutter build apk # release APK in build/app/outputs/flutter-apk/ (for installing by hand)
flutter build appbundle # release AAB in build/app/outputs/bundle/release/ (for the Play Store)
Both release builds need the release key, see below.
Check
flutter analyze
flutter test
flutter test tool/screenshots/ # PNGs in build/screenshots/
Layout
lib/domain/: plain Dart models and rules (strikes, combos, workouts, sessions, settings, weekly goal and streak).lib/data/: built-in combos and ready-made workouts, and the local SQLite store.lib/engine/: the workout engine (a time-driven state machine), voice callout text and strike timing.lib/services/: sound, text-to-speech and keeping the workout alive with the screen off.lib/state/: Riverpod providers that connect the store to the screens.lib/theme/: colours (white, near-black#111111, red#D10A1F) and text styles.lib/ui/: shared widgets and the bottom navigation shell.lib/features/<screen>/: one folder per screen;features/figure/holds the code-drawn strike figure and its key poses.
Fonts: Barlow Condensed (headings and numbers) and Chivo (body text), both under
the SIL Open Font License (see assets/fonts/).
Release signing
Release builds are signed with BagDrill's own upload key, never the debug key.
The key is not in git. Before flutter build apk or flutter build appbundle,
copy both files into android/:
android/bagdrill-upload.jks(the keystore)android/key.propertieswithstorePassword,keyPassword,keyAlias=upload,storeFile=../bagdrill-upload.jks
Without them a release build stops with an error. Keep a backup of both files: an app signed with another key cannot update an installed BagDrill.
On the Play Store, Play App Signing re-signs the AAB with Google's app key; the upload key above only proves the upload comes from us.