Flutter集成Kinestex SDK插件kinestex_sdk_flutter的使用

发布于 1周前 作者 songsunli 来自 Flutter

Flutter集成Kinestex SDK插件kinestex_sdk_flutter的使用

精确运动跟踪和分析SDK

保持领先——Kinestex AI运动跟踪

可用集成选项

集成选项

集成选项 描述 功能 详情
完整用户体验 让我们为您推荐最佳的健身计划,处理运动跟踪和整体用户界面。基于您的品牌书进行高度定制,以获得无缝体验。 - 长期生活方式训练计划
- 特定部位和全身训练
- 单个练习挑战(如20次深蹲挑战)
- 游戏化AI体验
查看集成选项
自定义用户体验 集成相机组件与运动跟踪。实时反馈所有客户的动作。控制相机组件的位置、大小和放置位置。 - 实时反馈客户动作
- 每个重复和错误的沟通
- 可定制的相机组件位置、大小和放置
查看详细信息

配置

权限

AndroidManifest.xml

<manifest>标签内添加以下权限:

<!-- 添加此行 -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-feature android:name="android.hardware.camera" android:required="false" />

Info.plist

添加以下键用于相机和麦克风使用:

<key>NSCameraUsageDescription</key>
<string>请授予相机访问权限以开始AI锻炼</string>

安装库

在你的pubspec.yaml文件中添加以下依赖:

dependencies:
   kinestex_sdk_flutter: @latest
   permission_handler: ^11.3.1

使用

初始设置

  1. 前提条件:确保已在AndroidManifest.xmlInfo.plist中添加了必要的权限。
  2. 启动视图:初始化必要的小部件,检查并请求相机权限再启动Kinestex。

在你的Podfile中添加以下内容:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)

    target.build_configurations.each do |config|
      # 可以在这里删除未使用的权限
      # 更多信息:https://github.com/BaseflowIT/flutter-permission-handler/blob/master/permission_handler/ios/Classes/PermissionHandlerEnums.h
      # 例如,如果不需要相机权限,只需添加 'PERMISSION_CAMERA=0'
      config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
        '$(inherited)',
        ## dart: PermissionGroup.camera
        'PERMISSION_CAMERA=1',
      ]
    end
  end
end

请求相机权限后再启动Kinestex:

void _checkCameraPermission() async {
   if (await Permission.camera.request() != PermissionStatus.granted) {
      _showCameraAccessDeniedAlert();
   }
}

void _showCameraAccessDeniedAlert() {
   showDialog(
      context: context,
      builder: (BuildContext context) {
         return AlertDialog(
            title: const Text("相机权限被拒绝"),
            content: const Text("相机访问权限对于应用正常运行是必需的。"),
            actions: <Widget>[
               TextButton(
                  child: const Text("确定"),
                  onPressed: () {
                     Navigator.of(context).pop();
                  },
               ),
            ],
         );
      },
   );
}

集成选项

函数 描述
createMainView 集成我们的完整用户体验
createPlanView 集成单个计划组件
createWorkoutView 集成单个锻炼组件
createChallengeView 集成单个练习挑战形式
createExperienceView 集成AI体验。请联系我们获取更多详情
createCameraComponent 集成我们的相机组件,包括姿势分析和反馈

集成步骤

  1. 识别适合你需求的集成选项。
  2. 创建一个处理来自Kinestex SDK消息的消息处理函数:
ValueNotifier<bool> showKinesteX = ValueNotifier<bool>(false);

void handleWebViewMessage(WebViewMessage message) {
  if (message is ExitKinestex) {
    // 处理ExitKinestex消息
    setState(() {
      showKinesteX.value = false;
    });
  }  else {
    // 处理其他消息类型
    print("收到其他消息: ${message.data}");
  }
}
  1. 自定义并显示每个集成选项:

主要集成选项

可用的计划分类

计划类别 (键: planCategory)
力量训练
有氧运动
体重管理
康复

显示主视图:

KinesteXAIFramework.createMainView(
  apiKey: apiKey,
  companyName: company,
  isShowKinestex: showKinesteX,
  userId: userId,
  planCategory: PlanCategory.Cardio,  // 计划类别
  data: <String, dynamic>{ 'isHideHeaderMain': false }, // 可选自定义参数
  isLoading: ValueNotifier<bool>(false),
  onMessageReceived: (message) {
    handleWebViewMessage(message);
  },
);

计划集成选项

KinesteXAIFramework.createPlanView(
  apiKey: apiKey,
  companyName: company,
  userId: userId,
  isShowKinestex: showKinesteX,
  planName: "Circuit Training", // 指定计划名称
  isLoading: ValueNotifier<bool>(false),
  onMessageReceived: (message) {
    handleWebViewMessage(message);
  }
);

锻炼集成选项

KinesteXAIFramework.createWorkoutView(
      apiKey: apiKey,
      isShowKinestex: showKinesteX,
      companyName: company,
      userId: userId,
      workoutName: "Fitness Lite", // 指定锻炼名称
      isLoading: ValueNotifier<bool>(false),
      onMessageReceived: (message) {
        handleWebViewMessage(message);
      }
);

挑战集成选项

KinesteXAIFramework.createChallengeView(
    apiKey: apiKey,
    companyName: company,
    isShowKinestex: showKinesteX,
    userId: userId,
    exercise: "Squats", // 练习标题
    countdown: 100,
    isLoading: ValueNotifier<bool>(false),
    onMessageReceived: (message) {
      handleWebViewMessage(message);
    }
);

体验集成选项

KinesteXAIFramework.createExperienceView(
    apiKey: apiKey,
    companyName: company,
    isShowKinestex: showKinesteX,
    userId: userId,
    experience: "box",
    isLoading: ValueNotifier<bool>(false),
    onMessageReceived: (message) {
    handleWebViewMessage(message);
  }
);

相机集成选项

  1. 显示KinestexSDK:
ValueListenableBuilder<String?>(
  valueListenable: updateExercise,
  builder: (context, value, _) {
    return KinesteXAIFramework.createCameraComponent(
      apiKey: apiKey,
      companyName: company,
      isShowKinestex: showKinesteX,
      userId: userId,
      exercises: ["Squats", "Jumping Jack"],
      currentExercise: "Squats",
      updatedExercise: value,
      isLoading: ValueNotifier<bool>(false),
      onMessageReceived: (message) {
        handleWebViewMessage(message);
      },
    );
  },
),
  1. 更新当前练习通过更改通知器的值:
updateExercise.value = 'Jumping Jack';
  1. 处理用户完成的重复次数和错误消息:
ValueNotifier<int> reps = ValueNotifier<int>(0);
ValueNotifier<String> mistake = ValueNotifier<String>("--");

void handleWebViewMessage(WebViewMessage message) {
  if (message is ExitKinestex) {
    // 处理ExitKinestex消息
    setState(() {
      showKinesteX.value = false;
    });
  } else if (message is Reps) {
    setState(() {
      reps.value = message.data['value'] ?? 0;
    });
  } else if (message is Mistake) {
    setState(() {
      mistake.value = message.data['value'] ?? '--';
    });
  } else {
    // 处理其他消息类型
    print("收到其他消息: ${message.data}");
  }
}

更多关于Flutter集成Kinestex SDK插件kinestex_sdk_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter集成Kinestex SDK插件kinestex_sdk_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter项目中集成并使用kinestex_sdk_flutter插件,你需要按照以下步骤进行配置和实现。这些步骤假设你已经有一个Flutter项目,并且熟悉基本的Flutter开发流程。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加kinestex_sdk_flutter的依赖。确保你的Flutter环境是最新的,以避免兼容性问题。

dependencies:
  flutter:
    sdk: flutter
  kinestex_sdk_flutter: ^最新版本号  # 请替换为实际的最新版本号

运行flutter pub get来安装依赖。

2. 配置iOS和Android项目

由于kinestex_sdk_flutter可能涉及原生代码,你需要在iOS和Android项目中进行一些配置。这通常包括添加必要的权限和设置。

iOS

  • ios/Runner/Info.plist中添加任何必要的权限请求。
  • 如果SDK需要特定的iOS框架,你可能需要在ios/Podfile中添加它们。

Android

  • android/app/src/main/AndroidManifest.xml中添加任何必要的权限。
  • 根据SDK文档,你可能需要在android/build.gradleandroid/app/build.gradle中添加特定的配置。

3. 初始化并使用Kinestex SDK

在你的Dart代码中,你可以这样初始化并使用kinestex_sdk_flutter插件。以下是一个基本的示例:

import 'package:flutter/material.dart';
import 'package:kinestex_sdk_flutter/kinestex_sdk_flutter.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late KinestexSdk kinestexSdk;

  @override
  void initState() {
    super.initState();
    // 初始化Kinestex SDK
    _initKinestexSdk();
  }

  Future<void> _initKinestexSdk() async {
    try {
      // 替换为你的API密钥或初始化参数
      kinestexSdk = await KinestexSdk.init('your_api_key_here');
      print('Kinestex SDK initialized successfully');
    } catch (e) {
      print('Failed to initialize Kinestex SDK: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Kinestex SDK Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 使用Kinestex SDK进行某些操作,例如开始会话
              try {
                await kinestexSdk.startSession();
                print('Session started successfully');
              } catch (e) {
                print('Failed to start session: $e');
              }
            },
            child: Text('Start Session'),
          ),
        ),
      ),
    );
  }
}

注意事项

  1. API密钥:确保你使用正确的API密钥进行初始化。
  2. 错误处理:在实际应用中,添加更详细的错误处理逻辑。
  3. 权限:确保在设备上授予了所有必要的权限。
  4. 文档:参考kinestex_sdk_flutter的官方文档,了解所有可用的方法和参数。

由于kinestex_sdk_flutter的具体API和实现细节可能随时间变化,建议查阅最新的SDK文档以获取准确的信息。

回到顶部