FLUTTER ECOSYSTEM

TrackMyIndoorWorkout/TrackMyIndoorWorkout

室內健身器材(自行車、跑步機、划船機、皮划艇/獨木舟/游泳模擬器、橢圓機)的配套應用程式,用於記錄虛擬訓練,透過在賽道形狀路線中簡單循環產生合成GPS軌跡

追蹤我的室內運動 專案封面
Stars
74
Forks
18
最近推送(UTC)
2026年6月14日
專案狀態
未封存
Track My Indoor Workout GitHub avatar
GITHUB Organization

Track My Indoor Workout ↗

Organization for the "Track My Indoor Workout" application

Fresno, CA
語言DartJavaKotlinSwiftRubyPythonNixObjective-C

相關套件與範例

使用的依賴

依賴清單 62 項

App 分類

原始 README

以下為英文專案原文快照,最新內容請造訪 GitHub。

展開 / 收合專案 README

Track My Indoor Workout

Track My Indoor Workout is an application which supports Bluetooth Low Energy (BLE) enabled smart fitness machines to record stationary workouts. Workouts can have GPS routes - generated based on speed - and upload to numerous fitness portals. Workouts can be exported in common formats and in some cases (ANT+ machines or data migration purposes) there's an option to import saved workouts.

The ultimate mission is to improve people's health by preventing fitness machines from becoming laundry drying racks.

For more details please see the application's website.

Technical Architecture and Design

DeepWiki: https://deepwiki.com/TrackMyIndoorWorkout/TrackMyIndoorWorkout/

Contribution Rules

  • The project works on the Flutter stable channel. (For a good while it was on the beta channel because for example https://github.com/flutter/flutter/issues/114199#issuecomment-1294263848 and https://github.com/TrackMyIndoorWorkout/TrackMyIndoorWorkout/issues/399).
  • For a successful local build you need to augment a dummy secret.dart file. You can simply copy the provided mock file to satisfy compilation dependencies: cp lib/secret.mock.dart lib/secret.dart
  • Execute dart format --line-length 100 . at the project root. The project currently uses flutter format with 100 character line length.
  • Also run flutter analyze at the project root. That picks up the analyzer settings from the yaml. You can consider adding the format and the analyze execution in a client-side pre-push hook.
  • For larger features let me know your plans in advance, so I can open up a feature branch so you can create a PR against that. Internally I follow Git Flow branching conventions (cheat sheet and another info page). I'm performing releases that way as well. I'm also using Git Town but currently only for git sync and I don't use the git hack - git ship workflow. I'm avoiding squashing commits because I want to preserve detailed commit history to help forensic debugging. But I'm flexible if contributions become common and majority wants to change policies.

Extra build quirks

  • Certain plugins which have native parts may require the Java version to be raised from 1.8 to 17
    • There are two types of these variables: JavaVersion.VERSION_17 and 17
    • You may want to raise the Java version in your IDE
    • Some plugins may require you to raise the Java version in the build files in the cache
    • Example of modifying the receive_sharing_intent plugin:
      1. The cache location on Windows is C:\Users\{USERNAME}\AppData\Local\Pub\Cache\hosted\pub.dev\receive_sharing_intent-1.8.1\android\build.gradle or on Linux /home/{USERNAME}/.pub-cache/hosted/pub.dev/receive_sharing_intent-1.8.1/android/build.gradle
      2. Add / modify compileOptions and kotlinOptions to raise the Java version:
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_17
            targetCompatibility JavaVersion.VERSION_17
        }
        kotlinOptions {
            jvmTarget = "17"
        }
        
  • If you don't have you may need to install 28.2.13676358 version of the NDK:
    1. cd ${HOME}/{ANDROID_SDK}/cmdline-tools/latest/bin/ (in my case /home/csaba/Android/Sdk/cmdline-tools/latest/bin/)
    2. Verify that you can install this version of NDK: ./sdkmanager --list | grep "ndk;28.2.13676358"
    3. Install it: ./sdkmanager "ndk;28.2.13676358"
    4. In you local.properties if you have NDK directory, reference that:
      sdk.dir=/home/csaba/Android/Sdk
      ndk.dir=/home/csaba/Android/Sdk/ndk/28.2.13676358
      

Code regeneration

With certain data persistence or testing Mock changes you may need code regeneration. It's always good to regen the persistence code after any isar version change.

  1. dart run build_runner build --delete-conflicting-outputs
  2. Don't forget to re-run dart format . after that.

License

This work is licensed under Apache 2.0. SPDX-License-Identifier: Apache-2.0