Flutter霍尼韦尔Captuvo设备集成插件flutter_honeywell_captuvo_plugin_nullsafe的使用
Flutter霍尼韦尔Captuvo设备集成插件flutter_honeywell_captuvo_plugin_nullsafe的使用
使用说明
重要:此插件基于@entegyopensource在https://github.com/entegyopensource/flutter_honeywell_captuvo_plugin 上发布的插件。
本仓库的目标是更新项目的文档,并使其能在Flutter应用中使用。
Flutter Honeywell Captuvo插件
这是一个用于Honeywell Captuvo SL22/42 iOS API的Flutter包装器,具有空安全特性。
使用方法
确保在ios/Info.plist
文件中添加以下内容:
<key>UISupportedExternalAccessoryProtocols</key>
<array>
<string>com.honeywell.scansled.protocol.decoder</string>
</array>
仅需在Dart文件中导入以下库:
import 'package:flutter_honeywell_captuvo_plugin/flutter_honeywell_captuvo_plugin.dart';
要开始使用SL22或SL42设备,必须调用以下函数启动它:
FlutterHoneywellCaptuvoPlugin.startDecoderHardware();
为了获取连接事件的通知,可以使用decoderConnectionStream
,以下是一个完整的示例:
class _MyAppState extends State<MyApp> {
StreamSubscription decoderConnectionStreamSubscription;
[@override](/user/override)
void initState() {
super.initState();
FlutterHoneywellCaptuvoPlugin.startDecoderHardware();
decoderConnectionStreamSubscription = FlutterHoneywellCaptuvoPlugin
.decoderConnectionStream
.listen((isConnected) {
if (isConnected) {
FlutterHoneywellCaptuvoPlugin.startDecoderHardware();
}
});
}
[@override](/user/override)
void dispose() {
decoderConnectionStreamSubscription?.cancel();
super.dispose();
}
}
最后一步是获取条码扫描变化的通知:
class _MyAppState extends State<MyApp> {
StreamSubscription decoderConnectionStreamSubscription;
StreamSubscription decoderScanDataStreamSubscription;
[@override](/user/override)
void initState() {
super.initState();
FlutterHoneywellCaptuvoPlugin.startDecoderHardware();
decoderConnectionStreamSubscription = FlutterHoneywellCaptuvoPlugin
.decoderConnectionStream
.listen((isConnected) {
if (isConnected) {
FlutterHoneywellCaptuvoPlugin.startDecoderHardware();
}
});
decoderScanDataStreamSubscription = FlutterHoneywellCaptuvoPlugin
.decoderScanDataStream
.listen((barcode) {
_showMyDialog("Barcode: " + barcode);
});
}
[@override](/user/override)
void dispose() {
decoderConnectionStreamSubscription?.cancel();
decoderScanDataStreamSubscription?.cancel();
super.dispose();
}
Future<void> _showMyDialog(String message) async {
return showDialog<void>(
context: context,
barrierDismissible: false, // 用户必须点击按钮!
builder: (BuildContext context) {
return AlertDialog(
title: const Text('AlertDialog Title'),
content: SingleChildScrollView(
child: ListBody(
children: <Widget>[
Text(message),
],
),
),
actions: <Widget>[
TextButton(
child: const Text('Approve'),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
);
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Captuvo SL42 API Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
StreamBuilder<bool>(
stream: FlutterHoneywellCaptuvoPlugin.decoderConnectionStream,
initialData: false,
builder: (_, snapshot) => Text(
'Decoder is ${snapshot.data ? "Connected" : "Disconnected"}'),
),
const SizedBox(height: 10.0),
StreamBuilder<String>(
stream: FlutterHoneywellCaptuvoPlugin.decoderScanDataStream,
initialData: "NONE",
builder: (_, snapshot) =>
Text('Last scan data: ${snapshot.data}'),
),
],
),
),
),
floatingActionButton: GestureDetector(
child: Container(
height: 100.0,
width: 100.0,
decoration: BoxDecoration(
color: Colors.blue,
borderRadius: BorderRadius.circular(50.0),
),
child: Icon(Icons.scanner),
),
onTapDown: (_) => FlutterHoneywellCaptuvoPlugin.startDecoderScanning(),
onTapUp: (_) => FlutterHoneywellCaptuvoPlugin.stopDecoderScanning(),
),
);
}
}
示例代码
以下是完整的示例代码,位于这里:
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_honeywell_captuvo_plugin_nullsafe/flutter_honeywell_captuvo_plugin_nullsafe.dart';
void main() => runApp(MaterialApp(home: MyApp()));
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
StreamSubscription decoderConnectionStreamSubscription;
StreamSubscription decoderScanDataStreamSubscription;
[@override](/user/override)
void initState() {
super.initState();
FlutterHoneywellCaptuvoPlugin.startDecoderHardware();
decoderConnectionStreamSubscription = FlutterHoneywellCaptuvoPlugin
.decoderConnectionStream
.listen((isConnected) {
_showMyDialog("Connection event received changed");
if (isConnected) {
FlutterHoneywellCaptuvoPlugin.startDecoderHardware();
}
});
decoderScanDataStreamSubscription =
FlutterHoneywellCaptuvoPlugin.decoderScanDataStream.listen((barcode) {
_showMyDialog("Barcode: " + barcode);
});
}
[@override](/user/override)
void dispose() {
decoderConnectionStreamSubscription?.cancel();
decoderScanDataStreamSubscription?.cancel();
super.dispose();
}
Future<void> _showMyDialog(String message) async {
return showDialog<void>(
context: context,
barrierDismissible: false, // 用户必须点击按钮!
builder: (BuildContext context) {
return AlertDialog(
title: const Text('AlertDialog Title'),
content: SingleChildScrollView(
child: ListBody(
children: <Widget>[
Text(message),
],
),
),
actions: <Widget>[
TextButton(
child: const Text('Approve'),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
);
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Captuvo SL42 API Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
StreamBuilder<bool>(
stream: FlutterHoneywellCaptuvoPlugin.decoderConnectionStream,
initialData: false,
builder: (_, snapshot) => Text(
'Decoder is ${snapshot.data ? "Connected" : "Disconnected"}'),
),
const SizedBox(height: 10.0),
StreamBuilder<String>(
stream: FlutterHoneywellCaptuvoPlugin.decoderScanDataStream,
initialData: "NONE",
builder: (_, snapshot) =>
Text('Last scan data: ${snapshot.data}'),
),
],
),
),
),
floatingActionButton: GestureDetector(
child: Container(
height: 100.0,
width: 100.0,
decoration: BoxDecoration(
color: Colors.blue,
borderRadius: BorderRadius.circular(50.0),
),
child: Icon(Icons.scanner),
),
onTapDown: (_) => FlutterHoneywellCaptuvoPlugin.startDecoderScanning(),
onTapUp: (_) => FlutterHoneywellCaptuvoPlugin.stopDecoderScanning(),
),
);
}
}
更多关于Flutter霍尼韦尔Captuvo设备集成插件flutter_honeywell_captuvo_plugin_nullsafe的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter霍尼韦尔Captuvo设备集成插件flutter_honeywell_captuvo_plugin_nullsafe的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中集成和使用flutter_honeywell_captuvo_plugin_nullsafe
插件的一个代码示例。这个插件用于与霍尼韦尔Captuvo设备集成,提供对条形码扫描、磁条读取等功能的访问。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加flutter_honeywell_captuvo_plugin_nullsafe
依赖:
dependencies:
flutter:
sdk: flutter
flutter_honeywell_captuvo_plugin_nullsafe: ^最新版本号 # 请替换为实际可用的最新版本号
然后运行flutter pub get
来安装依赖。
2. 导入插件
在你的Dart文件中导入插件:
import 'package:flutter_honeywell_captuvo_plugin_nullsafe/flutter_honeywell_captuvo_plugin_nullsafe.dart';
3. 初始化插件
在Flutter应用的适当位置(如initState
或某个服务初始化方法中)初始化插件:
class _MyHomePageState extends State<MyHomePage> {
late FlutterHoneywellCaptuvoPlugin _captuvoPlugin;
@override
void initState() {
super.initState();
_captuvoPlugin = FlutterHoneywellCaptuvoPlugin();
// 监听扫描事件
_captuvoPlugin.onScanDataReceived.listen((scanData) {
print('Scan Data Received: $scanData');
// 在这里处理扫描数据
});
// 初始化Captuvo设备(如果需要)
_initializeCaptuvoDevice();
}
Future<void> _initializeCaptuvoDevice() async {
try {
await _captuvoPlugin.initialize();
print('Captuvo Device Initialized');
} catch (e) {
print('Failed to Initialize Captuvo Device: $e');
}
}
@override
void dispose() {
_captuvoPlugin.dispose();
super.dispose();
}
// ... 其他UI代码和逻辑
}
4. 使用插件功能
扫描条形码/二维码
插件已经通过事件监听的方式自动处理了扫描事件,如上例中的_captuvoPlugin.onScanDataReceived.listen
。
读取磁条数据
如果需要读取磁条数据,可以使用以下方法:
Future<void> _readMagneticStripe() async {
try {
String? magneticStripeData = await _captuvoPlugin.readMagneticStripe();
print('Magnetic Stripe Data: $magneticStripeData');
// 在这里处理磁条数据
} catch (e) {
print('Failed to Read Magnetic Stripe: $e');
}
}
配置Captuvo设备
插件可能提供了一些配置方法,你可以根据需求调用这些方法。例如,设置扫描器的蜂鸣声:
Future<void> _configureBeepSound() async {
try {
await _captuvoPlugin.setBeepEnabled(true); // 启用蜂鸣声
print('Beep Sound Enabled');
} catch (e) {
print('Failed to Configure Beep Sound: $e');
}
}
5. 完整示例
以下是一个完整的示例,展示了如何在Flutter应用中集成并使用flutter_honeywell_captuvo_plugin_nullsafe
插件:
import 'package:flutter/material.dart';
import 'package:flutter_honeywell_captuvo_plugin_nullsafe/flutter_honeywell_captuvo_plugin_nullsafe.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
late FlutterHoneywellCaptuvoPlugin _captuvoPlugin;
@override
void initState() {
super.initState();
_captuvoPlugin = FlutterHoneywellCaptuvoPlugin();
_captuvoPlugin.onScanDataReceived.listen((scanData) {
print('Scan Data Received: $scanData');
// 更新UI或处理数据
});
_initializeCaptuvoDevice();
}
Future<void> _initializeCaptuvoDevice() async {
try {
await _captuvoPlugin.initialize();
print('Captuvo Device Initialized');
} catch (e) {
print('Failed to Initialize Captuvo Device: $e');
}
}
Future<void> _readMagneticStripe() async {
try {
String? magneticStripeData = await _captuvoPlugin.readMagneticStripe();
print('Magnetic Stripe Data: $magneticStripeData');
// 更新UI或处理数据
} catch (e) {
print('Failed to Read Magnetic Stripe: $e');
}
}
Future<void> _configureBeepSound() async {
try {
await _captuvoPlugin.setBeepEnabled(true);
print('Beep Sound Enabled');
} catch (e) {
print('Failed to Configure Beep Sound: $e');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Captuvo Device Integration'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: _readMagneticStripe,
child: Text('Read Magnetic Stripe'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _configureBeepSound,
child: Text('Configure Beep Sound'),
),
],
),
),
);
}
@override
void dispose() {
_captuvoPlugin.dispose();
super.dispose();
}
}
请确保在实际应用中根据Captuvo设备的手册和插件的文档进行更多的配置和功能调用。此示例仅展示了基本的集成和使用方法。