Flutter打印机控制插件sunmi_printer的使用
Flutter打印机控制插件sunmi_printer的使用
安装
flutter pub add sunmi_printer
测试设备
- Sunmi V2 Pro
- Sunmi V2 Pro (Label Version)
初始化
import 'package:sunmi_printer/sunmi_printer.dart';
await SunmiPrinter.bindingPrinter(); // 必须绑定打印机。更多示例,请参阅示例标签。
常用功能列表
Method | Function Type (Future) | Description | Support Devices |
---|---|---|---|
bindingPrinter() | void | 绑定Sunmi内嵌打印机服务,仅初始化一次。 | Sunmi v2 pro, Sunmi v2 Pro (label version) |
unbindingPrinter() | void | 根据您的使用场景可以解绑打印机。 | Sunmi v2 pro, Sunmi v2 Pro (label version) |
initPrinter() | bool | 打印机初始化。注意:重置逻辑程序(如设置、粗体等)但不会清除缓冲区中的数据。因此,在重置后打印未完成的任务将继续进行。如果初始化成功,将返回true 值。 |
Sunmi v2 pro, Sunmi v2 Pro (label version) |
getPrinterStatus() | enum PrinterStatus | 返回枚举状态,例如:PrinterStatus.NORMAL, PrinterStatus.ERROR等… Refer to this list of status | Sunmi v2 pro, Sunmi v2 Pro (label version) |
getPrinterStatusWithVerbose() | String | 返回附加详细信息或文本解释。例如:‘Something went wrong.’ (ERROR), ‘Works normally’ (NORMAL)等… Refer to this list of status | Sunmi v2 pro, Sunmi v2 Pro (label version) |
getPrinterMode() | enum PrinterMode | 获取打印机模式。注意:如果要打印标签,请将打印机模式更改为标签模式,但标签模式仅支持V2 Pro标签版本。Refer to this list of mode | Sunmi v2 pro, Sunmi v2 Pro (label version) |
lineWrap(int lines) | void | 在纸上实施n个换行符。注意:强制换行。在内容打印后在纸上实施n个换行符。 | Sunmi v2 pro, Sunmi v2 Pro (label version) |
printText(String text) | void | 需要打印的文字。根据文档从Sunmi…我们需要在字符串末尾添加\n ,但我已经在字符串末尾附加上了\n ,所以您不需要手动添加\n 。 |
Sunmi v2 pro, Sunmi v2 Pro (label version) |
setAlignment(PrintAlign alignment) | void | 下一行方法的对齐方式。可用的对齐方式:PrintAlign.LEFT, PrintAlign.CENTER 和 PrintAlign.RIGHT | Sunmi v2 pro, Sunmi v2 Pro (label version) |
printImage(Uint8List img) | void | 将图像转换为Uint8List格式以传递给参数。注意:图像分辨率应在2M以内,并且宽度应与纸张规格一致(58: 384 Pixel, 80: 576 Pixel)。超出纸张宽度则无法显示。 | Sunmi v2 pro, Sunmi v2 Pro (label version) |
交易功能列表
Method | Function Type (Future) | Description | Support Devices |
---|---|---|---|
startTransactionPrint([bool clear = false]) | void | 进入交易模式。如果向函数传递参数true ,它将打印交易队列中的所有内容。如果传递参数false ,它将不打印交易队列中的内容,并将其保存并提交下次。默认值为false 。有关详情,请参阅Sunmi文档。 |
Sunmi v2 pro, Sunmi v2 Pro (label version) |
submitTransactionPrint() | void | 提交交易打印 | Sunmi v2 pro, Sunmi v2 Pro (label version) |
exitTransactionPrint([bool clear = true]) | void | 退出交易打印模式。如果向函数传递参数true ,它将打印缓冲区中的所有内容。如果传递参数false ,它将不打印交易队列中的内容并将其保存以供下次提交。默认值为true 。有关详情,请参阅Sunmi文档。 |
Sunmi v2 pro, Sunmi v2 Pro (label version) |
示例代码 - 用于交易打印
// 进入交易模式
await SunmiPrinter.startTransactionPrint();
// 设置任何所需的对齐方式
await SunmiPrinter.setAlignment(PrintAlign.CENTER);
await SunmiPrinter.printImage(img); // 注意:img变量必须先转换为Uint8List格式
await SunmiPrinter.printText('hello sunmi');
await SunmiPrinter.lineWrap(2);
await SunmiPrinter.printText('test');
await SunmiPrinter.setAlignment(PrintAlign.RIGHT);
await SunmiPrinter.printText('printer');
await SunmiPrinter.lineWrap(1);
await SunmiPrinter.setAlignment(PrintAlign.LEFT);
await SunmiPrinter.printText('end');
// 可以在此处添加其他打印相关的方法...
// 最后添加提交打印
await SunmiPrinter.submitTransactionPrint(); // 提交并开始打印,您可以保持提交以循环
// 记得在完成后退出交易模式。
await SunmiPrinter.exitTransactionPrint();
标签打印功能列表
注意事项:
- 使用标签打印功能前,请确保已打开设置->内置打印->打印模式选择并选择标签热敏模式。您的选择将被记录并使设备变为标签打印机时打印标签。请参阅Sunmi文档。
- 如果是第一次使用或更换了不同类型的标签纸,请打开设置->内置打印->标签学习并点击学习标签纸按钮。请参阅Sunmi文档。
Method | Function Type (Future) | Description | Support Devices |
---|---|---|---|
startLabelPrint() | void | 开始标签打印 | Sunmi v2 Pro (label version) |
exitLabelPrint() | void | 退出标签打印。如果您在同一时间打印多个标签,请只在列表中最后一个项/索引处运行此函数。Refer to this example | Sunmi v2 pro, Sunmi v2 Pro (label version) |
示例代码 - 用于标签打印
// 进入标签模式
await SunmiPrinter.startLabelPrint();
// 设置任何所需的对齐方式
await SunmiPrinter.setAlignment(PrintAlign.CENTER);
await SunmiPrinter.printImage(img); // 注意:img变量必须先转换为Uint8List格式
// 记得在完成后退出标签模式。
await SunmiPrinter.exitLabelPrint();
示例代码 - 用于标签打印(多于一个)
// 获取最后一个索引
int lastIndex = imgURLList.length - 1;
await Future.forEach(imgURLList, (String url) async {
// 进入标签模式
await SunmiPrinter.startLabelPrint();
// 开始标签内容
int index = imgURLList.indexOf(url);
// 示例图片来自互联网
String url = 'https://pngimg.com/uploads/nike/small/nike_PNG18.png';
// 转换图像为Uint8List格式
Uint8List byte = (await NetworkAssetBundle(Uri.parse(url)).load(url)).buffer.asUint8List();
await SunmiPrinter.printImage(byte);
// 结束标签内容
// 检查是否为最后一个项目
if (index == lastIndex) {
// 只有在打印最后一个标签时才运行此函数
await SunmiPrinter.exitLabelPrint();
}
});
枚举列表
-
PrinterStatus
enum PrinterStatus { ERROR, NORMAL, ABNORMAL_COMMUNICATION, OUT_OF_PAPER, PREPARING, OVERHEATED, OPEN_THE_LID, PAPER_CUTTER_ABNORMAL, PAPER_CUTTER_RECOVERED, NO_BLACK_MARK, NO_PRINTER_DETECTED, FAILED_TO_UPGRADE_FIRMWARE, EXCEPTION }
-
PrinterVerboseStatus
{ 'ERROR': 'Something went wrong.', 'NORMAL': 'Works normally', 'ABNORMAL_COMMUNICATION': 'Abnormal communication', 'OUT_OF_PAPER': 'Out of paper', 'PREPARING': 'Preparing printer', 'OVERHEATED': 'Overheated', 'OPEN_the_lid': 'Open the lid', 'PAPER_CUTTER_ABNORMAL': 'The paper cutter is abnormal', 'PAPER_CUTTER_RECOVERED': 'The paper cutter has been recovered', 'NO_BLACK_MARK': 'No black mark had been detected', 'NO_PRINTER_DETECTED': 'No printer had been detected', 'FAILED_TO_UPGRADE_FIRMWARE': 'Failed to upgrade firmware', 'EXCEPTION': 'Unknown Error code', }
-
PrinterMode
enum PrinterMode { NORMAL_MODE, BLACK_LABEL_MODE, LABEL_MODE }
更多关于Flutter打印机控制插件sunmi_printer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter打印机控制插件sunmi_printer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用sunmi_printer
插件来控制Sunmi打印机的示例代码。这个插件允许你通过Flutter应用直接与Sunmi的内置打印机进行交互。
首先,确保你已经在pubspec.yaml
文件中添加了sunmi_printer
依赖:
dependencies:
flutter:
sdk: flutter
sunmi_printer: ^最新版本号 # 请替换为实际的最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,在你的Flutter项目中,你可以按照以下方式使用sunmi_printer
插件:
import 'package:flutter/material.dart';
import 'package:sunmi_printer/sunmi_printer.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Sunmi Printer Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Sunmi Printer Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: _printText,
child: Text('Print Text'),
),
ElevatedButton(
onPressed: _printBarcode,
child: Text('Print Barcode'),
),
],
),
),
);
}
Future<void> _printText() async {
try {
// 初始化打印机
await SunmiPrinter.initPrinter();
// 设置打印内容
String textToPrint = "Hello, Sunmi Printer!";
// 打印文本
await SunmiPrinter.printText(textToPrint);
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Text printed successfully')));
} catch (e) {
print("Error printing text: $e");
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Failed to print text')));
}
}
Future<void> _printBarcode() async {
try {
// 初始化打印机
await SunmiPrinter.initPrinter();
// 设置条码内容
String barcodeData = "123456789012";
// 打印条码
await SunmiPrinter.printBarcode(barcodeData, width: 3, height: 100, barcodeType: BarcodeType.CODE128);
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Barcode printed successfully')));
} catch (e) {
print("Error printing barcode: $e");
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Failed to print barcode')));
}
}
}
在这个示例中,我们创建了一个简单的Flutter应用,其中包含两个按钮:一个用于打印文本,另一个用于打印条码。_printText
函数用于打印简单的文本,而_printBarcode
函数则用于打印条码。
注意:
SunmiPrinter.initPrinter()
用于初始化打印机。SunmiPrinter.printText(String text)
用于打印文本。SunmiPrinter.printBarcode(String data, {double width, double height, BarcodeType type})
用于打印条码,其中width
和height
是条码的宽度和高度,type
是条码的类型(如CODE128)。
请确保你的设备是Sunmi设备,并且已经正确连接了打印机,否则这些功能可能无法正常工作。此外,根据sunmi_printer
插件的文档,可能会有更多的功能和参数可供选择,建议查阅最新的官方文档以获取更多信息。