Flutter集成Zebra设备插件flutter_zebra_sdk的使用
Flutter集成Zebra设备插件flutter_zebra_sdk的使用
Getting Started
import 'package:flutter_zebra_sdk/flutter_zebra_sdk.dart';
Android
根据你的打印机需求,需要以下权限:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>
Work in progress
- ✅ 发送ZPL数据通过TCP/IP
- ✅ 发送ZPL数据通过蓝牙®无需配对
- ❌ 发送CPCL数据通过TCP/IP
- ❌ 发送CPCL数据通过蓝牙®无需配对
完整示例代码
以下是一个完整的示例代码,展示了如何使用flutter_zebra_sdk
插件来与Zebra打印机进行通信。
import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'dart:async';
// import 'package:flutter/services.dart';
import 'package:flutter_zebra_sdk/flutter_zebra_sdk.dart';
void main() {
runApp(MaterialApp(home: MyApp()));
}
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
[@override](/user/override)
void initState() {
super.initState();
initial();
}
void initial() async {
// await Permission.
}
Future _ackAlert(BuildContext context, String title) async {
return showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text(title),
// content: const Text('This item is no longer available'),
actions: [
TextButton(
child: Text('Ok'),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
);
}
Future<void> onDiscovery() async {
var a = await ZebraSdk.onDiscovery();
print(a);
var b = json.decode(a);
var printers = b['content'];
if (printers != null) {
var printObj = json.decode(printers);
print(printObj);
}
print(b);
}
Future<void> onDiscoveryUSB(dynamic context) async {
var a = await ZebraSdk.onDiscoveryUSB();
_ackAlert(context, 'USB $a');
print(a);
var b = json.decode(a);
var printers = b['content'];
if (printers != null) {
var printObj = json.decode(printers);
print(printObj);
}
print(b);
}
Future<void> onGetIPInfo() async {
var a = await ZebraSdk.onGetPrinterInfo('192.168.1.26');
print(a);
}
Future<void> onTestConnect() async {
var a = await ZebraSdk.isPrinterConnected('192.168.1.26');
print(a);
var b = json.decode(a);
print(b);
}
Future<void> onTestTCP() async {
String data;
data = '''
''
^XA~TA000~JSN^LT0^MNW^MTT^PON^PMN^LH0,0^JMA^PR6,6~SD15^JUS^LRN^CI0^XZ
^XA
^MMT
^PW500
^LL0240
^LS0
^FT144,33^A0N,25,24^FB111,1,0,C^FH\^FDITEM TITLE^FS
^FT3,61^A@N,20,20,TT0003M_^FB394,1,0,C^FH\^CI17^F8^FDOption 1, Option 2, Option 3, Option 4, Opt^FS^CI0
^FT3,84^A@N,20,20,TT0003M_^FB394,1,0,C^FH\^CI17^F8^FDion 5, Option 6 ^FS^CI0
^FT34,138^A@N,25,24,TT0003M_^FB331,1,0,C^FH\^CI17^F8^FDOrder: https://eat.chat/phobac^FS^CI0
^FT29,173^A@N,20,20,TT0003M_^FB342,1,0,C^FH\^CI17^F8^FDPromotional Promotional Promotional^FS^CI0
^FT29,193^A@N,20,20,TT0003M_^FB342,1,0,C^FH\^CI17^F8^FD Promotional Promotional ^FS^CI0
^FT106,233^A0N,25,24^FB188,1,0,C^FH\^FDPHO BAC HOA VIET^FS
^PQ1,0,1,Y^XZ
''';
final rep = ZebraSdk.printZPLOverTCPIP('192.168.1.26', data: data);
print(rep);
}
Future<void> onTestBluetooth() async {
String data;
data = '''
''
^XA~TA000~JSN^LT0^MNW^MTT^PON^PMN^LH0,0^JMA^PR6,6~SD15^JUS^LRN^CI0^XZ
^XA
^MMC
^PW500
^LL0240
^LS0
^FT144,33^A0N,25,24^FB111,1,0,C^FH\^FDITEM TITLE^FS
^FT3,61^A@N,20,20,TT0003M_^FB394,1,0,C^FH\^CI17^F8^FDOption 1, Option 2, Option 3, Option 4, Opt^FS^CI0
^FT3,84^A@N,20,20,TT0003M_^FB394,1,0,C^FH\^CI17^F8^FDion 5, Option 6 ^FS^CI0
^FT34,138^A@N,25,24,TT0003M_^FB331,1,0,C^FH\^CI17^F8^FDOrder: https://eat.chat/phobac^FS^CI0
^FT29,173^A@N,20,20,TT0003M_^FB342,1,0,C^FH\^CI17^F8^FDPromotional Promotional Promotional^FS^CI0
^FT29,193^A@N,20,20,TT0003M_^FB342,1,0,C^FH\^CI17^F8^FD Promotional Promotional ^FS^CI0
^FT106,233^A0N,25,24^FB188,1,0,C^FH\^FDPHO BAC HOA VIET^FS
^PQ1,0,1,Y^XZ
''';
String arr = '50:8C:B1:8D:10:C7';
if (Platform.isIOS) {
arr = '50J171201608';
}
final rep = ZebraSdk.printZPLOverBluetooth(arr, data: data);
print(rep);
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Padding(
padding: const EdgeInsets.all(20.0),
child: Center(
child: Column(
children: [
TextButton(
onPressed: onGetIPInfo, child: Text('获取打印机信息')),
TextButton(
onPressed: onTestConnect, child: Text('测试连接')),
TextButton(onPressed: onDiscovery, child: Text('发现打印机')),
TextButton(
onPressed: () => onDiscoveryUSB(context),
child: Text('发现USB打印机')),
TextButton(onPressed: onTestTCP, child: Text('通过TCP打印')),
TextButton(
onPressed: onTestBluetooth, child: Text('通过蓝牙打印')),
],
),
),
),
),
);
}
}
更多关于Flutter集成Zebra设备插件flutter_zebra_sdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter集成Zebra设备插件flutter_zebra_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter应用中集成Zebra设备的SDK,特别是flutter_zebra_sdk
插件,可以让你与Zebra打印机进行通信并执行打印任务。以下是如何在你的Flutter项目中集成和使用flutter_zebra_sdk
的步骤。
1. 添加依赖
首先,在你的Flutter项目的pubspec.yaml
文件中添加flutter_zebra_sdk
插件的依赖。
dependencies:
flutter:
sdk: flutter
flutter_zebra_sdk: ^0.1.0 # 请检查最新版本
然后,运行flutter pub get
来安装依赖。
2. 配置Android和iOS项目
Android配置
在android/app/build.gradle
文件中,确保minSdkVersion
至少为21:
android {
...
defaultConfig {
...
minSdkVersion 21
...
}
...
}
iOS配置
在ios/Podfile
中,确保platform
设置为11.0
或更高:
platform :ios, '11.0'
然后,运行flutter pub get
和pod install
来更新依赖。
3. 初始化SDK
在你的Flutter应用中,首先需要初始化Zebra SDK。通常,这可以在main.dart
中的main
函数中完成。
import 'package:flutter/material.dart';
import 'package:flutter_zebra_sdk/flutter_zebra_sdk.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await FlutterZebraSdk.init();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Zebra SDK Demo',
home: HomeScreen(),
);
}
}
4. 使用SDK进行打印
在应用的主界面中,你可以使用flutter_zebra_sdk
提供的API与Zebra设备进行通信。以下是一个简单的示例,展示如何发送ZPL(Zebra Programming Language)指令进行打印。
import 'package:flutter/material.dart';
import 'package:flutter_zebra_sdk/flutter_zebra_sdk.dart';
class HomeScreen extends StatelessWidget {
Future<void> _printLabel() async {
String printerAddress = "192.168.1.123"; // 替换为你的打印机IP地址
String zplData = """
^XA
^FO50,50^A0N,50,50^FDHello, Zebra!^FS
^XZ
"""; // ZPL指令
try {
await FlutterZebraSdk.printZplOverTcp(printerAddress, zplData);
print("Print successful");
} catch (e) {
print("Print failed: $e");
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Zebra SDK Demo'),
),
body: Center(
child: ElevatedButton(
onPressed: _printLabel,
child: Text('Print Label'),
),
),
);
}
}
5. 处理设备发现和连接
flutter_zebra_sdk
还提供了发现和连接Zebra设备的API。你可以使用这些API来扫描并连接到附近的Zebra打印机。
Future<void> _discoverAndConnect() async {
try {
// 发现附近的Zebra打印机
List<DiscoveredPrinter> printers = await FlutterZebraSdk.discoverPrinters();
if (printers.isNotEmpty) {
// 连接到第一个发现的打印机
DiscoveredPrinter printer = printers.first;
await FlutterZebraSdk.connect(printer.address);
print("Connected to printer: ${printer.address}");
} else {
print("No printers found");
}
} catch (e) {
print("Discovery failed: $e");
}
}
6. 其他功能
flutter_zebra_sdk
还支持其他功能,如发送原始数据、获取打印机状态等。你可以查阅插件的文档或源代码以获取更多信息。
7. 运行应用
完成以上步骤后,你可以运行你的Flutter应用,并通过按钮触发打印任务或设备发现。
flutter run