Flutter集成Nimmsta服务插件nimmsta_sdk的使用
Flutter集成Nimmsta服务插件nimmsta_sdk的使用
Nimmsta SDK 是一个用于Flutter应用的Nimmsta服务插件。
目前仅支持Android平台,因为Nimmsta仅提供了针对该平台的SDK。
使用方法
在你的 pubspec.yaml
文件中添加以下依赖:
dependencies:
nimmsta_sdk: <version>
将以下值添加到你的 <strong>local.properties</strong>
文件中:
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>
在你的app级别的 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" /* TODO 临时依赖,为了使Nimmsta SDK工作 */
}
你的布局文件应该放在 /res/raw
目录下。
示例代码
以下是一个完整的示例代码,展示了如何在Flutter应用中集成和使用Nimmsta SDK。
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:nimmsta_sdk/nimmsta_sdk.dart';
import 'package:nimmsta_sdk/models/scan_picking_mode.dart' as Picking;
import 'package:nimmsta_sdk/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();
}
// 平台消息是异步的,所以我们初始化在一个异步方法中。
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服务插件nimmsta_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter集成Nimmsta服务插件nimmsta_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中集成并使用Nimmsta服务插件nimmsta_sdk
的代码案例。假设你已经有一个Flutter项目,并且已经配置好了开发环境。
第一步:添加依赖
首先,你需要在pubspec.yaml
文件中添加nimmsta_sdk
的依赖。确保你的Flutter项目根目录下有一个pubspec.yaml
文件,然后在dependencies
部分添加以下内容:
dependencies:
flutter:
sdk: flutter
nimmsta_sdk: ^最新版本号 # 请替换为实际的最新版本号
然后,运行以下命令来获取依赖:
flutter pub get
第二步:配置Android和iOS
在使用Nimmsta服务之前,你需要在Android和iOS平台上进行一些配置。这通常涉及在AndroidManifest.xml
和Info.plist
文件中添加必要的权限和配置。由于具体配置可能随Nimmsta SDK的版本变化,请参考Nimmsta的官方文档获取最新的配置信息。
第三步:初始化Nimmsta SDK
在你的Flutter项目的入口文件(通常是main.dart
)中,初始化Nimmsta SDK。以下是一个基本的初始化示例:
import 'package:flutter/material.dart';
import 'package:nimmsta_sdk/nimmsta_sdk.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
initNimmsta();
}
Future<void> initNimmsta() async {
// 替换为你的Nimmsta API密钥
String apiKey = 'YOUR_NIMMSTA_API_KEY';
try {
await Nimmsta.initialize(apiKey: apiKey);
print('Nimmsta SDK initialized successfully');
} catch (e) {
print('Failed to initialize Nimmsta SDK: $e');
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Nimmsta SDK Demo'),
),
body: Center(
child: Text('Check the console for Nimmsta SDK initialization status'),
),
),
);
}
}
第四步:使用Nimmsta SDK的功能
一旦SDK初始化成功,你就可以开始使用Nimmsta SDK提供的功能了。例如,发起一个呼叫:
Future<void> makeCall(String phoneNumber) async {
try {
await Nimmsta.makeCall(phoneNumber: phoneNumber);
print('Call initiated successfully');
} catch (e) {
print('Failed to initiate call: $e');
}
}
你可以在UI中添加一个按钮来触发这个呼叫功能:
ElevatedButton(
onPressed: () {
String phoneNumber = '目标电话号码'; // 替换为实际的电话号码
makeCall(phoneNumber);
},
child: Text('Make Call'),
),
完整示例
将上述代码片段整合起来,你的main.dart
文件可能看起来像这样:
import 'package:flutter/material.dart';
import 'package:nimmsta_sdk/nimmsta_sdk.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
initNimmsta();
}
Future<void> initNimmsta() async {
String apiKey = 'YOUR_NIMMSTA_API_KEY';
try {
await Nimmsta.initialize(apiKey: apiKey);
print('Nimmsta SDK initialized successfully');
} catch (e) {
print('Failed to initialize Nimmsta SDK: $e');
}
}
Future<void> makeCall(String phoneNumber) async {
try {
await Nimmsta.makeCall(phoneNumber: phoneNumber);
print('Call initiated successfully');
} catch (e) {
print('Failed to initiate call: $e');
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Nimmsta SDK Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () {
String phoneNumber = '目标电话号码'; // 替换为实际的电话号码
makeCall(phoneNumber);
},
child: Text('Make Call'),
),
],
),
),
),
);
}
}
确保替换'YOUR_NIMMSTA_API_KEY'
和'目标电话号码'
为实际的值。
这个示例展示了如何在Flutter项目中集成并使用Nimmsta服务插件nimmsta_sdk
的基本步骤。根据实际需求,你可能需要查阅Nimmsta的官方文档以获取更多高级功能和配置选项。