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
更多关于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.xml
和Info.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');
}