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\$&amp;=+', 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

1 回复

更多关于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('打印'),
    );
  }
}

注意事项

  1. 权限:确保你的应用具有必要的权限来访问和控制打印机。这通常需要在Android的AndroidManifest.xml中声明权限。

  2. 设备兼容性:这个插件是为Sunmi系列的智能POS终端设计的,因此在其他设备上可能无法正常工作。

  3. 错误处理:在实际应用中,你应该添加更多的错误处理和用户反馈机制,以处理各种可能的异常情况。

  4. 插件版本:确保你使用的是最新版本的sunmi_printer_plugin,以便获得最新的功能和修复。

通过上述代码,你可以在你的Flutter应用中实现对Sunmi打印机的控制。根据你的具体需求,你可以进一步扩展和定制打印内容。

回到顶部