Flutter打印机控制插件sunmi_printer_plugin的使用
Flutter 打印机控制插件 sunmi_printer_plugin 的使用
重要事项
此插件仅适用于 Android!
支持 Sunmi 设备和 Null Safety。
安装
在 pubspec.yaml
文件中添加依赖:
flutter pub add sunmi_printer_plugin
功能概述
- ✅ 写入文本(带样式或不带样式)
- ✅ 改变字体大小
- ✅ 跳行
- ✅ 绘制分隔线
- ✅ 开启/关闭粗体模式
- ✅ 打印所有类型的条形码(参见枚举类型)
- ✅ 打印二维码并自定义宽度和错误级别
- ✅ 从资源或网络打印图片
- ✅ 打印表格行,自定义宽度和对齐方式
- ✅ 可以结合已有的 ESC/POS 代码
- ✅ 切纸 - 专用方法来切纸
- ✅ 获取打印机序列号
- ✅ 获取打印机版本
- ✅ 获取纸张尺寸(0: 80mm, 1: 58mm)
- ✅ 在 LCD 上打印图片
- ✅ 在 LCD 上打印字符串,多行双行
- ✅ 打开收款抽屉
- ✅ 检查收款抽屉是否连接
- ✅ 获取收款抽屉打开次数
测试设备
- Sunmi V2 Pro
- Sunmi T2 mini
- Sunmi V2S
示例代码
示例代码:事务打印
import 'package:flutter/material.dart';
import 'package:sunmi_printer_plugin/sunmi_printer_plugin.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Sunmi Printer',
theme: ThemeData(primaryColor: Colors.black),
debugShowCheckedModeBanner: false,
home: const Home(),
);
}
}
class Home extends StatefulWidget {
const Home({Key? key}) : super(key: key);
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Sunmi printer Example')),
body: SingleChildScrollView(
child: Column(
children: [
ElevatedButton(
onPressed: () async {
await SunmiPrinter.initPrinter();
await SunmiPrinter.startTransactionPrint(true);
await SunmiPrinter.setAlignment(SunmiPrintAlign.RIGHT); // 右对齐
await SunmiPrinter.printText('Align right');
await SunmiPrinter.setAlignment(SunmiPrintAlign.LEFT); // 左对齐
await SunmiPrinter.printText('Align left');
await SunmiPrinter.setAlignment(SunmiPrintAlign.CENTER); // 居中对齐
await SunmiPrinter.printText('Align center');
await SunmiPrinter.lineWrap(2); // 跳两行
await SunmiPrinter.setFontSize(SunmiFontSize.XL); // 设置非常大的字体
await SunmiPrinter.printText('Very Large font!');
await SunmiPrinter.resetFontSize(); // 重置字体为中等大小
await SunmiPrinter.setCustomFontSize(12); // 设置自定义字体大小
await SunmiPrinter.printText('Custom font size!!!');
await SunmiPrinter.resetFontSize(); // 重置字体为中等大小
await SunmiPrinter.printQRCode('https://github.com/brasizza/sunmi_printer'); // 打印二维码
await SunmiPrinter.submitTransactionPrint(); // 提交并切纸
await SunmiPrinter.exitTransactionPrint(true); // 关闭事务
},
child: const Text('事务打印'),
),
],
),
),
);
}
}
示例代码:LCD 功能
import 'package:flutter/material.dart';
import 'package:sunmi_printer_plugin/sunmi_printer_plugin.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Sunmi Printer',
theme: ThemeData(primaryColor: Colors.black),
debugShowCheckedModeBanner: false,
home: const Home(),
);
}
}
class Home extends StatefulWidget {
const Home({Key? key}) : super(key: key);
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Sunmi printer Example')),
body: SingleChildScrollView(
child: Column(
children: [
ElevatedButton(
onPressed: () async {
await SunmiPrinter.lcdInitialize(); // 初始化 LCD
await SunmiPrinter.lcdWakeup(); // 打开 LCD
await SunmiPrinter.lcdSleep(); // 关闭 LCD
await SunmiPrinter.lcdClear(); // 清除 LCD 屏幕
await SunmiPrinter.lcdString('Hello'); // 写入简单一行
await SunmiPrinter.lcdString('Hello'); // 写入简单一行
await SunmiPrinter.lcdDoubleString('Hello', 'World'); // 写入两行
Uint8List byte = await readFileBytes('assets/images/128x40.png');
await SunmiPrinter.lcdImage(byte); // 在 LCD 上显示图片
await SunmiPrinter.lcdFillString('abcDEFgj0123\$&=+', size: 16, fill: true); // 填充字符串直到达到指定大小
await SunmiPrinter.lcdMultiString(
['Welcome to flutter.', 'Align 2.'],
[1, 2],
); // 多行文字,带有对齐方式
},
child: const Text('LCD 功能'),
),
],
),
),
);
}
}
Future<Uint8List> readFileBytes(String path) async {
ByteData fileData = await rootBundle.load(path);
Uint8List fileUnit8List = fileData.buffer.asUint8List(fileData.offsetInBytes, fileData.lengthInBytes);
return fileUnit8List;
}
示例代码:打开收款抽屉
import 'package:flutter/material.dart';
import 'package:sunmi_printer_plugin/sunmi_printer_plugin.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Sunmi Printer',
theme: ThemeData(primaryColor: Colors.black),
debugShowCheckedModeBanner: false,
home: const Home(),
);
}
}
class Home extends StatefulWidget {
const Home({Key? key}) : super(key: key);
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Sunmi printer Example')),
body: SingleChildScrollView(
child: Column(
children: [
ElevatedButton(
onPressed: () async {
bool isConnected = await SunmiPrinter.drawerStatus(); // 检查收款抽屉是否连接
if (isConnected) {
await SunmiPrinter.openDrawer(); // 打开收款抽屉
int timesOpened = await SunmiPrinter.drawerTimesOpen(); // 获取收款抽屉打开次数
print('Cash drawer opened $timesOpened times.');
} else {
print('Cash drawer is not connected.');
}
},
child: const Text('打开收款抽屉'),
),
],
),
),
);
}
}
枚举列表
打印机模式枚举
enum PrinterMode {
NORMAL_MODE,
BLACK_LABEL_MODE,
LABEL_MODE
}
对齐方式枚举
enum SunmiPrintAlign {
LEFT,
CENTER,
RIGHT,
}
二维码级别枚举
enum SunmiQrcodeLevel {
LEVEL_L,
LEVEL_M,
LEVEL_Q,
LEVEL_H,
}
条形码类型枚举
enum SunmiBarcodeType {
UPCA,
UPCE,
JAN13,
JAN8,
CODE39,
ITF,
CODABAR,
CODE93,
CODE128,
}
条形码文本位置枚举
enum SunmiBarcodeTextPos {
NO_TEXT,
TEXT_ABOVE,
TEXT_UNDER,
BOTH,
}
字体大小枚举
enum SunmiFontSize {
XS,
SM,
MD,
LG,
XL,
}
更多关于Flutter打印机控制插件sunmi_printer_plugin的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter打印机控制插件sunmi_printer_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用Flutter打印机控制插件sunmi_printer_plugin
的代码示例。这个插件通常用于控制Sunmi系列的智能POS终端的打印机功能。
首先,确保你已经在pubspec.yaml
文件中添加了sunmi_printer_plugin
依赖项:
dependencies:
flutter:
sdk: flutter
sunmi_printer_plugin: ^最新版本号
然后运行flutter pub get
来安装依赖。
使用示例
以下是一个简单的Flutter应用示例,展示了如何使用sunmi_printer_plugin
打印文本和二维码。
import 'package:flutter/material.dart';
import 'package:sunmi_printer_plugin/sunmi_printer_plugin.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Sunmi Printer Plugin Example'),
),
body: Center(
child: PrinterControlButton(),
),
),
);
}
}
class PrinterControlButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () async {
try {
// 初始化打印机
bool isSuccess = await SunmiPrinterPlugin.initPrinter();
if (!isSuccess) {
print("打印机初始化失败");
return;
}
// 打印文本
String textToPrint = "Hello, Sunmi Printer!";
bool printTextSuccess = await SunmiPrinterPlugin.printText(textToPrint);
if (!printTextSuccess) {
print("打印文本失败");
}
// 打印二维码
String qrCodeContent = "https://www.example.com";
int qrCodeWidth = 200; // 宽度,单位:点
int qrCodeHeight = 200; // 高度,单位:点
bool printQrCodeSuccess = await SunmiPrinterPlugin.printQrCode(
qrCodeContent,
qrCodeWidth,
qrCodeHeight
);
if (!printQrCodeSuccess) {
print("打印二维码失败");
}
// 打印换行符,用于分隔内容
bool printNewlineSuccess = await SunmiPrinterPlugin.printNewline();
if (!printNewlineSuccess) {
print("打印换行符失败");
}
print("打印成功");
} catch (e) {
print("打印过程中发生错误: $e");
}
},
child: Text('打印'),
);
}
}
注意事项
-
权限:确保你的应用具有必要的权限来访问和控制打印机。这通常需要在Android的
AndroidManifest.xml
中声明权限。 -
设备兼容性:这个插件是为Sunmi系列的智能POS终端设计的,因此在其他设备上可能无法正常工作。
-
错误处理:在实际应用中,你应该添加更多的错误处理和用户反馈机制,以处理各种可能的异常情况。
-
插件版本:确保你使用的是最新版本的
sunmi_printer_plugin
,以便获得最新的功能和修复。
通过上述代码,你可以在你的Flutter应用中实现对Sunmi打印机的控制。根据你的具体需求,你可以进一步扩展和定制打印内容。