Skip to content

Installation

PoseFlow ships as two Flutter packages. Most consumers only need the SDK; the Studio is only required when you also want to author new movements in-app.

Requirements

  • Flutter ≥ 3.16
  • Dart ≥ 3.0
  • iOS ≥ 12.0
  • Android minSdkVersion ≥ 21, compileSdk ≥ 34
  • Web: Chromium-based browsers (the pose pipeline runs as a Web Worker with WASM SIMD). Safari support is best-effort.

SDK only

dependencies:
pose_flow: ^0.1.0
import 'package:pose_flow/pose_flow.dart';
// On web platforms, or anywhere you want to avoid the native
// plugin surface, import the web-safe subset instead:
//
// import 'package:pose_flow/pose_flow_core.dart';

Platform setup

iOS

Add a camera-usage description to ios/Runner/Info.plist:

<key>NSCameraUsageDescription</key>
<string>PoseFlow needs the camera to track your movement.</string>

Podfile: ensure platform :ios, '12.0' is set. No other CocoaPods config is required, the plugin auto-registers.

Android

Camera + INTERNET permissions in android/app/src/main/AndroidManifest.xml:

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-feature android:name="android.hardware.camera" android:required="true" />

In android/app/build.gradle set minSdkVersion 21 or higher.

Web

PoseFlow’s web pipeline needs three asset files at a URL prefix you choose:

web/<prefix>/blazepose_worker.js
web/<prefix>/blazepose_pipeline.wasm
web/<prefix>/blazepose_pipeline.js
web/<prefix>/blazepose_detector_weights.bin
web/<prefix>/blazepose_optimized_weights_int8.bin

These ship inside the SDK package. Tell PoseFlow where you’ve served them by passing assetBasePath to the widget that loads them , see integrating on web.

SDK + Studio

If you also want the authoring surface:

dependencies:
pose_flow: ^0.1.0
pose_flow_studio: ^0.1.0

The Studio depends on a few host-side packages that may not be auto-pulled depending on your app’s existing dependency tree, if your build fails on missing imports, also add:

camera: ^0.11.0
google_fonts: ^6.0.0
file_picker: ^10.0.0

The Studio surfaces a single screen widget, PoseFlowStudioScreen. You mount it once you’ve wired up a StudioPersistence bundle that points at your storage backend (Firebase, Drift, in-memory for tests).

Verifying the install

A minimal sanity check, points a camera at a Pose skeleton overlay without any movement logic:

import 'package:flutter/material.dart';
import 'package:camera/camera.dart';
import 'package:pose_flow/pose_flow.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
final cameras = await availableCameras();
runApp(MaterialApp(home: Scaffold(
body: PoseCameraView(
cameras: cameras,
showSkeleton: true,
),
)));
}

If the camera previews and you see a green skeleton overlay tracking you, you’re good. Next stop: Quick start, wire up a rep counter against a bundled movement.