A simple timer for your workouts, built with Flutter!

Overview

Contributors Forks Stargazers Issues MIT License


Logo

Just Another Workout Timer

A simple timer for your workouts, built with Flutter!
Get it on F-Droid Get it on GitHub

NOTE: Due to the process of releasing updates on F-Droid, the version there can be outdated for a few days. The version on GitHub will always be the latest. Keep in mind, that the F-Droid and GitHub versions are not compatible with each other. If you switch, you will loose ALL your data. You need to backup your workouts to keep them.

Table of Contents

  1. About The Project
  2. Roadmap
  3. Contributing
  4. License

About The Project

  • Create complex workouts easily
  • Define your own exercises with custom durations
  • Add exercises to custom sets
  • Text-to-Speech announcements
  • Modern Material Design built with Flutter
  • Ad-free
  • Free and Open-Source

Screenshots

Workout Screen

Home Screen

Builder Screen

Settings Screen

How To Backup & Restore Your Workouts

You can export individual workouts or create an export of all your workouts and import them later. You can also transfer them to another device.

Roadmap

See the open issues for a list of proposed features (and known issues).

Contributing

Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

Building the app

  1. Run flutter pub get
  2. Run ./scripts/generate_code.sh or flutter pub run flutter_oss_licenses:generate.dart and flutter pub run intl_utils:generate to generate licenses and translations
  3. Run flutter build apk or run using your IDE

License

Distributed under the MIT License. See LICENSE for more information.

Comments
  • Import a backup isn't working

    Import a backup isn't working

    Describe the bug Importing a backup that I've previously exported to a file isn't working, the workout doesn't show up in the list.

    To Reproduce Steps to reproduce the behavior:

    1. Go to Settings
    2. Click on "Import a backup"
    3. Selected a previously exported workout
    4. The previously exported workout doesn't show up in the list of workouts

    Expected behavior Would expect the workout to show up in the list.

    Smartphone (please complete the following information):

    • Device: Google Pixel 2
    • OS: Android 11
    bug 
    opened by MaxSchlueter 9
  • Calendar integration

    Calendar integration

    Is your feature request related to a problem? Please describe. No.

    Describe the solution you'd like I would like to have a button besides a workout that allows me to schedule it in my calendar for a certain time.

    Additional context I like this feature a lot in the Transportr app which allows one to add an itinerary to a calendar.

    Also, if you give me some pointers where to change the code I would be happy to implement this new feature.

    enhancement P3 
    opened by MaxSchlueter 8
  • App won't launch

    App won't launch

    Describe the bug Unable to launch the app installed from f-droid

    To Reproduce Steps to reproduce the behavior:

    1. Install the app from f-droid
    2. Launch the app
    3. The app shows splash screen and that's all

    Expected behavior App should launch.

    Screenshots Screenshot_20220203-200124

    Smartphone (please complete the following information):

    • Device: Samsung Galaxy A40 (SM-A405FN)
    • OS:Android 11
    • Version 1.10.0

    Additional context Lang: cs-CZ

    bug P1 
    opened by kudlav 7
  • Dedicated Import/Export Option

    Dedicated Import/Export Option

    Folders within Android/data are no longer accessible in Android 11 thanks to Google's new policy. Therefore a dedicated option to import/export workouts is required.

    enhancement 
    opened by alphanerdgen 6
  • Stuck on splash screen

    Stuck on splash screen

    After launching the app, the app remains on the splash screen with the icon and remains nonfunctional. I find this problem only applies to versions after 1.1.1.

    I am more than willing to give more debugging information if someone can tell me how to obtain them. Thanks!

    bug question 
    opened by omichaelo 5
  • Does not run in background

    Does not run in background

    Great app. Very simple and clean. However, it needs to be able to continue to countdown and announce when the screen is off/locked.

    To reproduce the problem, start a workout then press the power button to lock your phone. The countdown will pause.

    I want to use this for longer run/walk interval training with my phone in my pocket, so the option for "Keep screen awake" is not suitable.

    Thanks for making this!

    bug question 
    opened by byronigoe 4
  • Pressing skip twice before starting a workout will break the app

    Pressing skip twice before starting a workout will break the app

    Describe the bug The timer will still tick but the app is broken for the first workout. If you let the timer countdown until the next set then it will be okay again.

    To Reproduce Steps to reproduce the behaviour:

    1. Select a workout to start on the home screen.
    2. Before pressing play, press skip twice.
    3. The progress bar will decrease.
    4. Press play.
    5. The timer will tick down to the first workout and then be displayed weirdly.

    Expected behaviour I would expect the app just to skip to the next workout each time you press the skip button.

    Smartphone (please complete the following information):

    • Honor 10 lite and Moto G60
    • Android 11 and 12
    bug 
    opened by ShemJM 3
  • Can't build apk (null safety and rate parameter)

    Can't build apk (null safety and rate parameter)

    Describe the bug Can't build apk from fresh clone as described in README.md. My flutter version is 2.0.6 (Channel stable, 2.0.6, on Microsoft Windows [Version 10.0.18363.1500], locale de-DE)

    F:\android\just_another_workout_timer>d:\flutter\bin\flutter pub get
    Running "flutter pub get" in just_another_workout_timer...          5,5s
    
    F:\android\just_another_workout_timer>d:\flutter\bin\flutter pub run flutter_oss_licenses:generate.dart
    
    F:\android\just_another_workout_timer>d:\flutter\bin\flutter pub run intl_utils:generate
    
    F:\android\just_another_workout_timer>d:\flutter\bin\flutter build apk
    
    Building without sound null safety
    For more information see https://dart.dev/null-safety/unsound-null-safety
    
    lib/generated/l10n.dart:18:11: Error: Null safety features are disabled for this library.
    Try removing the package language version or setting the language version to 2.12 or higher.
      static S? _current;
              ^
    lib/generated/l10n.dart:49:11: Error: Null safety features are disabled for this library.
    Try removing the package language version or setting the language version to 2.12 or higher.
      static S? maybeOf(BuildContext context) {
              ^
    lib/generated/intl/messages_all.dart:31:23: Error: Null safety features are disabled for this library.
    Try removing the package language version or setting the language version to 2.12 or higher.
    MessageLookupByLibrary? _findExact(String localeName) {
                          ^
    lib/generated/intl/messages_all.dart:69:23: Error: Null safety features are disabled for this library.
    Try removing the package language version or setting the language version to 2.12 or higher.
    MessageLookupByLibrary? _findGeneratedMessagesFor(String locale) {
                          ^
    lib/generated/l10n.dart:23:20: Error: Null safety features are disabled for this library.
    Try removing the package language version or setting the language version to 2.12 or higher.
        return _current!;
                       ^
    lib/generated/l10n.dart:46:20: Error: Null safety features are disabled for this library.
    Try removing the package language version or setting the language version to 2.12 or higher.
        return instance!;
                       ^
    lib/sound_helper.dart:27:44: Error: No named parameter with the name 'rate'.
        if (useSound) _soundpool.play(_beepId, rate: 1.5);
                                               ^^^^
    lib/sound_helper.dart:31:64: Error: No named parameter with the name 'rate'.
        if (PrefService.getBool('ticks')) _soundpool.play(_beepId, rate: 2);
                                                                   ^^^^
    
    
    FAILURE: Build failed with an exception.
    
    * Where:
    Script 'd:\flutter\packages\flutter_tools\gradle\flutter.gradle' line: 991
    
    * What went wrong:
    Execution failed for task ':app:compileFlutterBuildRelease'.
    > Process 'command 'd:\flutter\bin\flutter.bat'' finished with non-zero exit value 1
    
    * Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
    
    * Get more help at https://help.gradle.org
    
    BUILD FAILED in 14s
    Running Gradle task 'assembleRelease'...
    Running Gradle task 'assembleRelease'... Done                      15,6s
    Gradle task assembleRelease failed with exit code 1
    
    F:\android\just_another_workout_timer>
    

    This is my first attempt with flutter and dart, so it might be something very trivial I didn't do correctly. Basically it seems to be related to null safety and the rate parameter in _soundpool.play.

    bug 
    opened by StefRe 3
  • chore(deps): bump actions/setup-java from 1 to 3

    chore(deps): bump actions/setup-java from 1 to 3

    Bumps actions/setup-java from 1 to 3.

    Release notes

    Sourced from actions/setup-java's releases.

    v3.0.0

    In scope of this release we changed version of the runtime Node.js for the setup-java action and updated package-lock.json file to v2.

    Breaking Changes

    With the update to Node 16 in #290, all scripts will now be run with Node 16 rather than Node 12.

    v2.5.0

    In scope of this pull request we add support for Microsoft Build of OpenJDK (actions/setup-java#252).

    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Setup-java
        uses: actions/setup-java@v2
        with:
          distribution: microsoft
          java-version: 11
    

    Supported distributions

    Currently, the following distributions are supported:

    Keyword Distribution Official site License
    temurin Eclipse Temurin Link Link
    zulu Zulu OpenJDK Link Link
    adopt or adopt-hotspot Adopt OpenJDK Hotspot Link Link
    adopt-openj9 Adopt OpenJDK OpenJ9 Link Link
    liberica Liberica JDK Link Link
    microsoft Microsoft Build of OpenJDK Link Link

    v2.4.0

    In scope of this pull request we add support for Liberica JDK (actions/setup-java#225).

    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Setup-java
        uses: actions/setup-java@v2
        with:
          distribution: liberica
          java-version: 11
    

    Supported distributions

    Currently, the following distributions are supported:

    Keyword Distribution Official site License
    zulu Zulu OpenJDK Link Link
    adopt or adopt-hotspot Adopt OpenJDK Hotspot Link Link
    adopt-openj9 Adopt OpenJDK OpenJ9 Link Link
    temurin Eclipse Temurin Link Link

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 2
  • Sponsoring and donating

    Sponsoring and donating

    Hi! I've being using this app on a daily basis for quite a while, and I'd like to send the author a cup of coffee.

    Is that possible? If it isn't, could you add some sponsoring information? I suggest ko-fi or buymeacoffee

    enhancement 
    opened by LeoColman 2
  • Export/import feature

    Export/import feature

    I'd like to recommend this app to the other member in our club, and ideally be able to publish the workouts for download. Would it be possible to export a workout to e.g. JSON, so that it can be imported by another user?

    enhancement 
    opened by madduck 2
  • Any way to get this app into google playstore or apple store?

    Any way to get this app into google playstore or apple store?

    I used this app now for a while from f-droid and I appreciate your work. Well done. Some friends want to use this app on their iPhone or Android by downloading the app directly from the store.

    Since the app is written in flutter I'm sure it can be build for both android and iphone. So are there any plans in the future to release the app in the official stores? Otherwise is it allowed to fork the app and release it on your own ?

    enhancement 
    opened by S1ngularity96 0
  • Option for setting repetition number rather than time

    Option for setting repetition number rather than time

    Aim of this additional feature would be to allow a workout constrained by number of repetitions rather than time.

    Where you choose a time, could this be switched to a drop-down labelled "repetitions". Could additionally feature the ability to time the set.

    enhancement 
    opened by harminder-gill 0
  • chore(deps): Bump actions/upload-artifact from 3.1.0 to 3.1.1

    chore(deps): Bump actions/upload-artifact from 3.1.0 to 3.1.1

    Bumps actions/upload-artifact from 3.1.0 to 3.1.1.

    Release notes

    Sourced from actions/upload-artifact's releases.

    v3.1.1

    • Update actions/core package to latest version to remove set-output deprecation warning #351
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 0
  • Add option to choose which exercises play tick and which ones no

    Add option to choose which exercises play tick and which ones no

    I'm just wondering if is possible to add option to choose which exercises play the tick sound and which ones no.

    Thanks in advance for your effort! : )

    enhancement 
    opened by piojpub 0
  • Display problem to edit a workout because of the software buttons of Android

    Display problem to edit a workout because of the software buttons of Android

    Describe the bug When I edit a workout with two series of exercises, I can't access of the buttons of the last serie because of the software button of Android at the bottom of the display.

    Smartphone (please complete the following information):

    • Device: Lenovo P2
    • OS: Android 11
    • Version LineageOs 18.1

    display-problem_Just_Another_Workout_Timer_1

    bug 
    opened by jpggithub 0
  • chore(deps): Bump intl_utils from 2.6.1 to 2.7.0

    chore(deps): Bump intl_utils from 2.6.1 to 2.7.0

    Bumps intl_utils from 2.6.1 to 2.7.0.

    Changelog

    Sourced from intl_utils's changelog.

    2.7.0 - 2022-07-07

    • Update analyzer and petitparser dependencies
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies dart 
    opened by dependabot[bot] 0
Releases(v1.11.2)
Owner
Bastian Block
Bastian Block
This is a Quiz App With Timer In Flutter

Quizstar ! This is a Complete Quiz App in FLUTTER using a lot of features such as Multiple Screens Timer (30 sec By Default) Button Color Changes On C

Prince 185 Dec 18, 2022
This is Stop Watch Timer for flutter plugin.🏃‍♂️

stop_watch_timer Simple CountUp timer / CountDown timer. It easily create app of stopwatch. https://pub.dev/packages/stop_watch_timer Example code See

shohei 75 Nov 9, 2022
Stop Watch - Stop Watch Timer in Flutter

timerapp A new Flutter project. Getting Started This project is a starting point

MD Omar Faruk. 0 Jan 27, 2022
Chroneum - A Neumorphic Flutter timer and chronometer

Chroneum! A nice Flutter Neumorphic timer and chronometer. More Details The appl

Alessandro 2 Apr 4, 2022
Aplicativo de teste que roda em background timer atual utilizando Isolate.

# isolate_app A new Flutter project. ## Getting Started This project is a starting point for a Flutter application. A few resources to get you sta

Isaque Santos Paixão 1 Jun 20, 2022
Debounce builder, debounce timer

Debounce builder, debounce timer Features debounce builder - Widget provides debounce function from DebounceTimer instance debounce timer

Pokhodyun Alexander 2 Dec 22, 2022
A dart timer that can be configured to fire once or repeatedly with ability start, stop, resume and cancel.

A timer that can be configured to fire once or repeatedly with ability start, stop, resume and cancel. Getting started Add CompleteTimer to your pubsp

MohammadAminZamani.afshar 3 Jul 20, 2022
A simple to-do list built using flutter based on BLoC state management to manage your daily tasks .

?? Table of Contents About ScreenShots from the app Demo vedio Contributors About A to-do list flutter app to manage your daily tasks. it is built bas

Heba Ashraf 6 Oct 12, 2022
An simple app for your shared billings with your friends or enemies :)

oepaga A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if this i

tomas 2 Sep 23, 2022
Create a Flutter User Profile Page UI where you can access and edit your user's information within your Flutter app.

Flutter Tutorial - User Profile Page UI 1/2 Create a Flutter User Profile Page UI where you can access and edit your user's information within your Fl

Johannes Milke 46 Dec 6, 2022
Create a Flutter User Profile Page UI where you can access and edit your user's information within your Flutter app.

Flutter Tutorial - User Profile Page UI #2 Create a Flutter User Profile Page UI where you can access and edit your user's information within your Flu

Johannes Milke 45 Dec 15, 2022
A fully functional Movies Application built with Flutter. The application built with null safety and clean architecture, also uses OMDB API for fetching movies in the search item

Cinema DB Project Details This project uses null safety feature Project uses clean code architecture (Uncle Bob's Architecture) Project can run on bot

Dhruvam 2 Oct 1, 2022
Github Trending app built with Flutter+Redux+Built(Immutable Data)

Github Trending app built with Flutter+Redux+Built(Immutable Data)

huangyanxiong 9 May 13, 2020
Computer science courses, books and exams in your pocket. Built with Flutter and Free! ❤️

Computeiro - Free courses, books and exams Computer science exams in your pocket. Built with Flutter. Free Courses • Contributing ❤️ • License This pr

Felipe Augusto 31 Nov 27, 2022
An app that helps you manage your Postcard Creator orders. Built with Flutter

mailman A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if this

Dario Breitenstein 0 Jan 10, 2022
Allows communication between your bot and the Web App built in Flutter displayed inside Telegram.

tele_web_app It enables communication between your bot and the Flutter-embedded Web App displayed inside Telegram by making use of interoperability be

Yeikel Uriarte Arteaga 16 Dec 8, 2022
A responsive scaffold widget that adjusts to your device size, for your flutter mobile and web apps.

scaffold_responsive A responsive scaffold widget that adjusts to your device size, for your flutter mobile and web apps. Check out the Live demo here

Tushar Sadhwani 9 Sep 27, 2022
Behruz Hurramov 0 Dec 29, 2021