You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
samples/experimental/pedometer
dependabot[bot] 708b351e08
Bump fl_chart from 0.64.0 to 0.65.0 in /experimental/pedometer/example (#2099)
7 months ago
..
android Rebuild runners (#1725) 1 year ago
example Bump fl_chart from 0.64.0 to 0.65.0 in /experimental/pedometer/example (#2099) 7 months ago
ios Add `experimental/pedometer` (#1587) 1 year ago
lib Update Samples for 3.16 (#2085) 8 months ago
src [experimental/pedometer] Update jni and jnigen to 0.6 (#2006) 10 months ago
.gitignore Add `experimental/pedometer` (#1587) 1 year ago
.metadata [experimental/pedometer] Use `jnigen` and `jni` version from pub instead of git url. (#1655) 1 year ago
CHANGELOG.md Add `experimental/pedometer` (#1587) 1 year ago
LICENSE Add `experimental/pedometer` (#1587) 1 year ago
README.md [pedometer] Fix file/folder links and cleanup instructions (#1988) 11 months ago
analysis_options.yaml Add `experimental/pedometer` (#1587) 1 year ago
ffigen.yaml Add `experimental/pedometer` (#1587) 1 year ago
jnigen.yaml [experimental/pedometer] Update jni and jnigen to 0.6 (#2006) 10 months ago
pubspec.yaml Bump ffigen from 9.0.1 to 10.0.0 in /experimental/pedometer (#2093) 8 months ago

README.md

FFIgen + JNIgen pedometer

This is a demo for some of our tooling around calling platform APIs directly from dart code. This repository represents a demo of a plugin that leverages FFIgen & JNIgen. There is also an example pedometer app that uses the bindings generated from these tools.

  • FFIgen is used to generate bindings for C, Objective-C and Swift APIs.
  • JNIgen is used to generate bindings for Java and Kotlin APIs.

These tools are both experimental and are currently a work in progress. If you find any issues or have feedback, please file it on the corresponding GitHub repositories.

Re-generating bindings

The bindings that allow the Dart code to call the platform code have already been generated in the \lib folder. You can regenerate them by following the steps below:

FFIgen

Configuration of FFIgen for the CoreMotion framework is in the ffigen.yaml file. FFIgen currently does not support autogenerating code to handle callbacks. So, there are a few extra steps needed to appropriately handle callbacks in Objective-C. You can read more about this limitation on [dart.dev]((https://dart.dev/guides/libraries/objective-c-interop#callbacks-and-multithreading-limitations).

dart run ffigen --config ffigen.yaml

JNIgen

Configuration of JNIgen for the HealthConnect API is in the jnigen.yaml file.

  1. Build an Android APK file from the example app. Currently, JNIgen requires at least one APK build to obtain the classpaths of Android Gradle libraries.

    cd example && flutter build apk
    
  2. Return to the /pedometer directory and run jnigen:

    cd .. && dart run jnigen --config jnigen.yaml
    

Running the example app

The example app is located in the /example directory, and the following commands assume they are being run from that location.

Note that step counting is only available on physical devices.

iOS

  • Run flutter run and choose your physical device.
  • Allow the pedometer app access to step counting.

Android

  • Make sure that Google Fit is installed (to ensure that steps are being counted).
  • Run flutter run and choose your physical device.
  • Install Health Connect and grant access to Google Fit and the jni_demo app.

Project structure

  • src: Contains the native source code, and a CMakeLists.txt file for building that source code into a dynamic library.

  • lib: Contains the Dart code that defines the API of the plugin and calls into the native code using dart:ffi.

  • platform folders (ios etc.): Contain the build files for building and bundling the native code library with the platform application.

  • example: Contains the native source code for building that source code into a dynamic library.