Flutter集成来康宁SDK插件laikangning_sdk的使用

Flutter集成来康宁SDK插件laikangning_sdk的使用

本仓库是服务于莱康宁远程胎监设备 <code>eFM</code> 系列。

LKN FLUTTER PLUGIN

功能

初始化SDK

var laikangningSdk = LaikangningSdk();
laikangningSdk.initialize();

开启声音

laikangningSdk.startWork();

关闭声音

laikangningSdk.stopWork();

发送数据

laikangningSdk.putData(bytes);

接受解析协议后数据为

laikangningSdk.getFhrData().listen((event) {
    event.data.afm;
    _bleLogger.addToLog('type: ${event.type.name} - '
        'afm: ${event.data.afm} - '
        'toco: ${event.data.toco} - '
        'tocoFlag: ${event.data.tocoFlag}'
        'fhr1: ${event.data.fhr1} - '
        'fhr2: ${event.data.fhr2}'
        'devicePower: ${event.data.devicePower}'
        'afmFlag: ${event.data.afmFlag}'
        'docFlag: ${event.data.docFlag}'
        'fmFlag: ${event.data.fmFlag}');
  });

销毁SDK

laikangningSdk.deinitilize();

完整示例代码

以下是一个完整的示例代码,展示如何在Flutter项目中集成 laikangning_sdk 插件。

示例代码

import 'dart:io';

import 'package:flutter/material.dart';
import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:laikangning_sdk/laikangning_sdk.dart';
import 'package:laikangning_sdk_example/src/ble/ble_device_connector.dart';
import 'package:laikangning_sdk_example/src/ble/ble_device_interactor.dart';
import 'package:laikangning_sdk_example/src/ble/ble_scanner.dart';
import 'package:laikangning_sdk_example/src/ble/ble_status_monitor.dart';
import 'package:laikangning_sdk_example/src/ui/ble_status_screen.dart';
import 'package:laikangning_sdk_example/src/ui/device_list.dart';
import 'package:provider/provider.dart';

import 'src/ble/ble_logger.dart';

const _themeColor = Colors.lightGreen;

void main() {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化日志记录器
  final _bleLogger = BleLogger();
  
  // 初始化蓝牙服务
  final _ble = FlutterReactiveBle();
  
  // 蓝牙扫描器
  final _scanner = BleScanner(ble: _ble, logMessage: _bleLogger.addToLog);
  
  // 蓝牙状态监控器
  final _monitor = BleStatusMonitor(_ble);
  
  // 蓝牙设备连接器
  final _connector = BleDeviceConnector(
    ble: _ble,
    logMessage: _bleLogger.addToLog,
  );

  // 初始化Laikangning SDK
  var laikangningSdk = LaikangningSdk();
  laikangningSdk.initialize();
  laikangningSdk.startWork();

  // 监听FHR数据事件
  laikangningSdk.getFhrData().listen((event) {
    event.data.afm;
    _bleLogger.addToLog('type: ${event.type.name} - '
        'afm: ${event.data.afm} - '
        'toco: ${event.data.toco} - '
        'tocoFlag: ${event.data.tocoFlag}'
        'fhr1: ${event.data.fhr1} - '
        'fhr2: ${event.data.fhr2}'
        'devicePower: ${event.data.devicePower}'
        'afmFlag: ${event.data.afmFlag}'
        'docFlag: ${event.data.docFlag}'
        'fmFlag: ${event.data.fmFlag}');
  });

  // 初始化服务发现器
  final _serviceDiscoverer = BleDeviceInteractor(
    laikangningSdk: laikangningSdk,
    bleDiscoverServices: _ble.discoverServices,
    readCharacteristic: _ble.readCharacteristic,
    writeWithResponse: _ble.writeCharacteristicWithResponse,
    writeWithOutResponse: _ble.writeCharacteristicWithoutResponse,
    subscribeToCharacteristic: _ble.subscribeToCharacteristic,
    logMessage: _bleLogger.addToLog,
  );

  // 启动Flutter应用
  runApp(
    MultiProvider(
      providers: [
        Provider.value(value: _scanner),
        Provider.value(value: _monitor),
        Provider.value(value: _connector),
        Provider.value(value: _serviceDiscoverer),
        Provider.value(value: _bleLogger),
        StreamProvider<BleScannerState?>(
          create: (_) => _scanner.state,
          initialData: const BleScannerState(
            discoveredDevices: [],
            scanIsInProgress: false,
          ),
        ),
        StreamProvider<BleStatus?>(
          create: (_) => _monitor.state,
          initialData: BleStatus.unknown,
        ),
        StreamProvider<ConnectionStateUpdate>(
          create: (_) => _connector.state,
          initialData: const ConnectionStateUpdate(
            deviceId: 'Unknown device',
            connectionState: DeviceConnectionState.disconnected,
            failure: null,
          ),
        ),
      ],
      child: MaterialApp(
        title: 'Flutter Reactive BLE example',
        color: _themeColor,
        theme: ThemeData(primarySwatch: _themeColor),
        home: const HomeScreen(),
      ),
    ),
  );
}

class HomeScreen extends StatelessWidget {
  const HomeScreen({
    Key? key,
  }) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) => Consumer<BleStatus?>(
        builder: (_, status, __) {
          if (status == BleStatus.ready) {
            return const DeviceListScreen();
          } else {
            return BleStatusScreen(status: status ?? BleStatus.unknown);
          }
        },
      );
}

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

1 回复

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


在Flutter中集成第三方SDK(如来康宁SDK)通常需要创建一个Flutter插件,以便在Dart代码中调用原生平台(Android和iOS)的功能。以下是一个基本的步骤指南,帮助你集成来康宁SDK(假设SDK名称为laikangning_sdk)。

1. 创建Flutter插件

首先,你需要创建一个Flutter插件项目。你可以使用以下命令来创建一个新的插件:

flutter create --template=plugin laikangning_sdk_plugin

这将创建一个名为laikangning_sdk_plugin的Flutter插件项目。

2. 添加来康宁SDK到原生项目

接下来,你需要将laikangning_sdk添加到Android和iOS的原生项目中。

Android

  1. 打开android目录下的build.gradle文件。
  2. dependencies块中添加来康宁SDK的依赖项。例如:
dependencies {
    implementation 'com.laikangning:sdk:1.0.0' // 替换为实际的SDK版本
}
  1. 同步Gradle项目。

iOS

  1. 打开ios目录下的Podfile文件。
  2. 添加来康宁SDK的依赖项。例如:
pod 'LaikangningSDK', '~> 1.0.0' # 替换为实际的SDK版本
  1. 运行pod install来安装依赖。

3. 实现原生代码

在Flutter插件中,你需要实现原生代码来调用laikangning_sdk的功能。

Android

  1. 打开android/src/main/kotlin/com/example/laikangning_sdk_plugin/LaikangningSdkPlugin.kt文件。
  2. 实现调用laikangning_sdk的方法。例如:
package com.example.laikangning_sdk_plugin

import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.MethodChannel.MethodCallHandler
import io.flutter.plugin.common.MethodChannel.Result
import io.flutter.plugin.common.PluginRegistry.Registrar

class LaikangningSdkPlugin: MethodCallHandler {
  companion object {
    @JvmStatic
    fun registerWith(registrar: Registrar) {
      val channel = MethodChannel(registrar.messenger(), "laikangning_sdk_plugin")
      channel.setMethodCallHandler(LaikangningSdkPlugin())
    }
  }

  override fun onMethodCall(call: MethodCall, result: Result) {
    when (call.method) {
      "initializeSdk" -> {
        // 调用来康宁SDK的初始化方法
        // LaikangningSDK.initialize()
        result.success("SDK Initialized")
      }
      else -> result.notImplemented()
    }
  }
}

iOS

  1. 打开ios/Classes/LaikangningSdkPlugin.m文件。
  2. 实现调用laikangning_sdk的方法。例如:
#import "LaikangningSdkPlugin.h"
#import <LaikangningSDK/LaikangningSDK.h>

@implementation LaikangningSdkPlugin
+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {
  FlutterMethodChannel* channel = [FlutterMethodChannel
      methodChannelWithName:@"laikangning_sdk_plugin"
            binaryMessenger:[registrar messenger]];
  LaikangningSdkPlugin* instance = [[LaikangningSdkPlugin alloc] init];
  [registrar addMethodCallDelegate:instance channel:channel];
}

- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
  if ([@"initializeSdk" isEqualToString:call.method]) {
    // 调用来康宁SDK的初始化方法
    // [LaikangningSDK initialize];
    result(@"SDK Initialized");
  } else {
    result(FlutterMethodNotImplemented);
  }
}
@end

4. 在Dart代码中调用插件

最后,你可以在Flutter应用中使用这个插件来调用laikangning_sdk的功能。

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Laikangning SDK Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              String result = await LaikangningSdkPlugin.initializeSdk();
              print(result);
            },
            child: Text('Initialize SDK'),
          ),
        ),
      ),
    );
  }
}
回到顶部