Flutter集成Nimmsta SDK插件nimmsta_sdk_wrapper的使用

Flutter集成Nimmsta SDK插件nimmsta_sdk_wrapper的使用

Nimmsta SDK

一个用于Nimmsta SDK的Flutter包装器。

目前仅支持Android平台,因为Nimmsta只提供了针对该平台的SDK。


使用方法

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

dependencies:
  nimmsta_sdk: <version>

将以下值添加到您的local.properties文件中:

nimmsta.username=<username>
nimmsta.password=<password>

用户名和密码由Nimmsta提供(https://nimmsta.com/)。

AndroidManifest.xml中添加以下内容:

<application
    ...
    android:theme="@style/NormalTheme">
    <activity
        ...
        <meta-data
            android:name="io.flutter.embedding.android.NormalTheme"
            android:resource="@style/NormalTheme"
            />
        ...
</application>

/res/values/styles.xml中添加以下样式:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    ...
    <style name="NormalTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:windowBackground">?android:colorBackground</item>
    </style>
</resources>

在应用级别的build.gradle中添加以下配置:

android {
    ...
    packagingOptions {
        exclude 'META-INF/*.kotlin_module'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/INDEX.LIST'
        exclude 'META-INF/io.netty.versions.properties'
    }
}

dependencies {
    ...
    implementation "androidx.appcompat:appcompat:1.2.0" /* 临时依赖,用于使Nimmsta SDK正常工作 */
}

将需要加载的布局文件放在/res/raw目录下。


示例代码

以下是一个完整的示例代码,展示了如何使用nimmsta_sdk_wrapper插件。

示例代码

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

import 'package:nimmsta_sdk_wrapper/nimmsta_sdk_wrapper.dart';
import 'package:nimmsta_sdk_wrapper/models/scan_picking_mode.dart' as Picking;
import 'package:nimmsta_sdk_wrapper/models/scan_trigger_mode.dart' as Trigger;

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

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String? _barcode = "Unknown";
  String _connectionFlag = "disconnected";

  late NimmstaSdk nimmstaSdk;

  [@override](/user/override)
  void initState() {
    super.initState();
    initNimmsta();
  }

  // 初始化Nimmsta SDK
  Future<void> initNimmsta() async {
    nimmstaSdk = NimmstaSdk(
      didConnectAndInitCallback: (deviceAddress) async {
        // 设备连接并初始化回调
        await nimmstaSdk.setLayout("test_layout", {
          "title": "设备状态",
          "subtitle": "didConnectAndInitCallback",
        });
        await nimmstaSdk.pushSettings(true, true,
            Trigger.ScanTriggerMode.Button, Picking.ScanPickingMode.DISABLED);
        setState(() {
          _connectionFlag = "didConnectAndInitCallback";
        });
      },
      didDisconnectCallback: () {
        // 设备断开连接回调
        setState(() {
          _connectionFlag = "disconnected";
        });
      },
      didTouchCallback: (dynamic arguments) {
        // 屏幕触摸回调
        debugPrint(
            "NIMMSTA SDK: didTouchCallback with coordinates ${arguments.toString()}");
      },
      didClickButtonCallback: (dynamic action) {
        // 按钮点击回调
        debugPrint("NIMMSTA SDK: didClickButtonCallback with action $action");
      },
      didScanBarcodeCallback: (dynamic barcode) {
        // 条形码扫描回调
        setState(() {
          _barcode = barcode;
        });
      },
      didReconnectAndInitCallback: (deviceAddress) async {
        // 设备重新连接并初始化回调
        await nimmstaSdk.setLayout("test_layout", {
          "title": "设备状态",
          "subtitle": "didReconnectAndInitCallback",
        });
        await nimmstaSdk.pushSettings(true, true,
            Trigger.ScanTriggerMode.Button, Picking.ScanPickingMode.DISABLED);
        setState(() {
          _connectionFlag = "didReconnectAndInitCallback";
        });
      },
      connectedWithDeviceAddress: (deviceAddress) async {
        // 连接到设备地址回调
        await nimmstaSdk.setLayout("test_layout", {
          "title": "设备状态",
          "subtitle": "connectedWithDeviceAddress",
        });
        await nimmstaSdk.pushSettings(true, true,
            Trigger.ScanTriggerMode.Button, Picking.ScanPickingMode.DISABLED);
        setState(() {
          _connectionFlag = "connectedWithDeviceAddress";
        });
      },
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Center(
          child: Column(
            children: [
              Text('连接状态: $_connectionFlag\n'),
              TextButton(
                onPressed: () async {
                  // 连接Nimmsta设备
                  await nimmstaSdk.connect();
                },
                child: Text('连接Nimmsta设备'),
              ),
              Text('扫描的条形码: $_barcode\n'),
              TextButton(
                onPressed: () async {
                  // 更改布局
                  await nimmstaSdk.setLayout("test_layout", {
                    "title": "这是一个标题!",
                    "subtitle": "这是子标题",
                  });
                },
                child: Text('更改布局'),
              ),
              TextButton(
                onPressed: () async {
                  // 触发LED闪烁
                  await nimmstaSdk.triggerLEDBurst(2, 500, 250, Colors.green);
                },
                child: Text('触发LED'),
              ),
              TextButton(
                onPressed: () async {
                  // 触发蜂鸣器
                  await nimmstaSdk.triggerBeeperBurst(1, 100, 50, 100);
                },
                child: Text('触发蜂鸣器'),
              ),
              TextButton(
                onPressed: () async {
                  // 触发振动
                  await nimmstaSdk.triggerVibrationBurst(2, 1000, 500, 100);
                },
                child: Text('触发振动'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


要在Flutter中集成Nimmsta SDK插件nimmsta_sdk_wrapper,你需要按照以下步骤进行配置和使用。以下是一个基本的指南,帮助你快速上手。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加nimmsta_sdk_wrapper插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  nimmsta_sdk_wrapper: ^1.0.0  # 请确保使用最新版本

然后运行flutter pub get以获取依赖。

2. 初始化SDK

在你的Flutter应用中,首先需要初始化Nimmsta SDK。通常,你可以在main.dart文件中进行初始化。

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化Nimmsta SDK
  await NimmstaSdkWrapper.initialize(
    apiKey: 'YOUR_API_KEY',  // 替换为你的API Key
    userId: 'YOUR_USER_ID',  // 替换为你的用户ID
  );

  runApp(MyApp());
}

3. 使用SDK功能

nimmsta_sdk_wrapper插件提供了多种功能,例如扫描、连接设备、发送数据等。以下是一些常见的使用示例。

扫描设备

void scanDevices() async {
  List<DeviceInfo> devices = await NimmstaSdkWrapper.scanDevices();
  for (var device in devices) {
    print('Device Name: ${device.name}, Device Address: ${device.address}');
  }
}

连接设备

void connectToDevice(String deviceAddress) async {
  bool isConnected = await NimmstaSdkWrapper.connect(deviceAddress);
  if (isConnected) {
    print('Device connected successfully');
  } else {
    print('Failed to connect to device');
  }
}

发送数据

void sendData(String data) async {
  bool isSent = await NimmstaSdkWrapper.sendData(data);
  if (isSent) {
    print('Data sent successfully');
  } else {
    print('Failed to send data');
  }
}

4. 处理事件

nimmsta_sdk_wrapper插件还提供了一些事件监听器,例如设备连接状态变化、数据接收等。你可以通过注册回调函数来处理这些事件。

void setupEventListeners() {
  NimmstaSdkWrapper.onDeviceConnected((deviceInfo) {
    print('Device connected: ${deviceInfo.name}');
  });

  NimmstaSdkWrapper.onDataReceived((data) {
    print('Data received: $data');
  });
}

5. 断开连接

当你不再需要与设备通信时,可以断开连接。

void disconnectDevice() async {
  await NimmstaSdkWrapper.disconnect();
  print('Device disconnected');
}

6. 处理权限

在某些情况下,你可能需要请求权限(例如蓝牙权限)。你可以在AndroidManifest.xmlInfo.plist中添加相应的权限声明。

Android

android/app/src/main/AndroidManifest.xml中添加以下权限:

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

iOS

ios/Runner/Info.plist中添加以下权限:

<key>NSBluetoothAlwaysUsageDescription</key>
<string>We need access to Bluetooth to connect to Nimmsta devices.</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>We need access to Bluetooth to connect to Nimmsta devices.</string>

7. 运行应用

完成上述步骤后,你可以运行你的Flutter应用,并测试Nimmsta SDK的功能。

flutter run

8. 调试和测试

在开发过程中,确保你有一个Nimmsta设备进行测试。你可以使用print语句或调试工具来查看日志,确保一切正常运行。

9. 处理错误

在使用SDK时,可能会遇到各种错误。确保你处理了可能的异常情况,例如设备连接失败、权限被拒绝等。

try {
  await NimmstaSdkWrapper.connect(deviceAddress);
} catch (e) {
  print('Error connecting to device: $e');
}
回到顶部