Flutter打印机控制插件maxx_sunmi_printer的使用

Flutter打印机控制插件maxx_sunmi_printer的使用

maxx_sunmi_printer

这是一个新的Flutter项目。

Getting Started

此项目是一个用于Flutter的插件包起点, 该插件包包含针对Android和/或iOS平台的特定实现代码。

对于如何开始使用Flutter,您可以查看我们的在线文档,该文档提供了教程、示例、移动开发指南以及完整的API参考。

Contact Info

Support OS

此插件仅支持Android系统。

Device Support

  • Sunmi v2
  • Sunmi v2s
  • Sunmi v2 Pro
  • 其他型号

Import Package

import 'package:maxx_sunmi_printer/maxx_sunmi_printer.dart';

Features & Usage

打印文本

MaxxSunmiPrinter.printText("សួស្តីកម្ពុជា");

纸张进纸

MaxxSunmiPrinter.paperFeed()

打印图像

ByteData bytes = await rootBundle.load('assets/logo.jpg');
final buffer = bytes.buffer;
final imgData = base64.encode(Uint8List.view(buffer));
MaxxSunmiPrinter.printImage(imgData, align: SunmiAlign.center);
MaxxSunmiPrinter.paperFeed(number: 1);

打印文本线 ( ------------------------ )

MaxxSunmiPrinter.printTextLine()

打印条形码

MaxxSunmiPrinter.printBarcode("1234567890123")

打印二维码

MaxxSunmiPrinter.printQrCode("www.maxx4business.com")

打印表格

MaxxSunmiPrinter.printTable(
  isBold: true,
  cols: [
    SunmiCol(text: 'បរិយាយ', width: 5),
    SunmiCol(text: 'ចំនួន', width: 2, align: SunmiAlign.right),
    SunmiCol(text: 'តម្លៃ', width: 2, align: SunmiAlign.right),
    SunmiCol(text: 'សរុប', width: 3, align: SunmiAlign.right),
  ],
);

此插件依赖于Sunmi的Java库。 打印演示源代码 - Java Android

示例代码

example/lib/main.dart

import 'dart:convert';
import 'dart:typed_data';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:maxx_sunmi_printer/maxx_sunmi_printer.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String connection = "Disconnect";

  Future<void> printExample() async {
    // 打印图像
    ByteData bytes = await rootBundle.load('assets/logo.jpg');
    final buffer = bytes.buffer;
    final imgData = base64.encode(Uint8List.view(buffer));
    MaxxSunmiPrinter.printImage(imgData);

    MaxxSunmiPrinter.printText(
      'Maxx POS',
      styles: const SunmiStyles(
        isBold: true,
        isUnderLine: false,
        alignment: SunmiAlign.center,
        size: SunmiSize.lg,
      ),
    );

    MaxxSunmiPrinter.paperFeed();

    MaxxSunmiPrinter.printTable(
      cols: [
        SunmiCol(text: "លេខវិក្កយបត្រ", width: 6, alignment: SunmiAlign.left),
        SunmiCol(text: "IN00000001", width: 6, alignment: SunmiAlign.right),
      ],
    );

    MaxxSunmiPrinter.printTable(
      cols: [
        SunmiCol(text: "កាលបរិច្ឆេទ", width: 6, alignment: SunmiAlign.left),
        SunmiCol(text: "01-Aug-2022 11:11 AM", width: 6, alignment: SunmiAlign.right),
      ],
    );

    MaxxSunmiPrinter.printTable(
      cols: [
        SunmiCol(text: "អតិថិជន", width: 4, alignment: SunmiAlign.left),
        SunmiCol(text: "Jackie", width: 8, alignment: SunmiAlign.right),
      ],
    );

    MaxxSunmiPrinter.printTable(
      cols: [
        SunmiCol(text: "អ្នកគិតលុយ", width: 4, alignment: SunmiAlign.left),
        SunmiCol(text: "Rothanak", width: 8, alignment: SunmiAlign.right),
      ],
    );

    // 测试表格
    MaxxSunmiPrinter.printTable(
      isBold: true,
      cols: [
        SunmiCol(text: 'បរិយាយ', width: 5),
        SunmiCol(text: 'ចំនួន', width: 2, alignment: SunmiAlign.right),
        SunmiCol(text: 'តម្លៃ', width: 2, alignment: SunmiAlign.right),
        SunmiCol(text: 'សរុប', width: 3, alignment: SunmiAlign.right),
      ],
    );

    MaxxSunmiPrinter.printTextLine();

    String subTotal = "32.50";
    String discount = "0";
    String grandTotal = "32.50";
    String grandTotalRiel = "130000";
    String receiveAmount = "50.00";
    String changeAmount = "17.5";
    String changeAmountRiel = "70000";

    dynamic salesLine = [
      {"line_description": "បន្លែ", "quantity": 10.00, "unit_price": 1.5, "amount": 15.00},
      {"line_description": "ផ្លែឈឺ", "quantity": 2.00, "unit_price": 10, "amount": 20},
      {"line_description": "ទឹកកក", "quantity": 10, "unit_price": 0.25, "amount": 2.25},
    ];

    for (dynamic obj in salesLine) {
      MaxxSunmiPrinter.printTable(
        cols: [
          SunmiCol(text: obj["line_description"].toString(), width: 5),
          SunmiCol(text: obj["quantity"].toString(), width: 2, alignment: SunmiAlign.right),
          SunmiCol(text: obj["unit_price"].toString(), width: 2, alignment: SunmiAlign.right),
          SunmiCol(text: obj["amount"].toString(), width: 3, alignment: SunmiAlign.right),
        ],
      );
    }

    MaxxSunmiPrinter.printTextLine();

    MaxxSunmiPrinter.printTable(
      cols: [
        SunmiCol(text: 'សរុប', width: 6, alignment: SunmiAlign.left),
        SunmiCol(text: subTotal, width: 6, alignment: SunmiAlign.right),
      ],
    );

    MaxxSunmiPrinter.printTable(
      cols: [
        SunmiCol(text: 'បញ្ចុះតម្លៃ', width: 6, alignment: SunmiAlign.left),
        SunmiCol(text: discount, width: 6, alignment: SunmiAlign.right),
      ],
    );

    MaxxSunmiPrinter.printTable(
      isBold: true,
      cols: [
        SunmiCol(text: "សរុបចុងក្រោយ(\$)", width: 6, alignment: SunmiAlign.left),
        SunmiCol(text: grandTotal, width: 6, alignment: SunmiAlign.right),
      ],
    );
    MaxxSunmiPrinter.printTable(
      isBold: true,
      cols: [
        SunmiCol(text: "សរុបចុងក្រោយ(R)", width: 6, alignment: SunmiAlign.left),
        SunmiCol(text: grandTotalRiel, width: 6, alignment: SunmiAlign.right),
      ],
    );

    MaxxSunmiPrinter.printTable(
      isBold: true,
      cols: [
        SunmiCol(text: "ប្រាក់ទទួល(\$)", width: 6, alignment: SunmiAlign.left),
        SunmiCol(text: receiveAmount, width: 6, alignment: SunmiAlign.right),
      ],
    );

    MaxxSunmiPrinter.printTable(
      cols: [
        SunmiCol(text: "ប្រាក់អាប់(\$)", width: 6, alignment: SunmiAlign.left),
        SunmiCol(text: changeAmount, width: 6, alignment: SunmiAlign.right),
      ],
    );

    MaxxSunmiPrinter.printTable(
      cols: [
        SunmiCol(text: "ប្រាក់អាប់(៛)", width: 6, alignment: SunmiAlign.left),
        SunmiCol(text: changeAmountRiel, width: 6, alignment: SunmiAlign.right),
      ],
    );

    MaxxSunmiPrinter.paperFeed();

    MaxxSunmiPrinter.printText(
      "Exchange Rate 1\$: 4000} R",
      styles: const SunmiStyles(
        isBold: true,
        alignment: SunmiAlign.center,
        size: SunmiSize.sm,
      ),
    );
    MaxxSunmiPrinter.printText(
      "វិធីសាស្រ្តទូទាត់/Payment Method : CASH",
      styles: const SunmiStyles(
        isBold: true,
        alignment: SunmiAlign.center,
        size: SunmiSize.sm,
      ),
    );
    MaxxSunmiPrinter.printText(
      "ទំនិញទិញហើយមិនអាចប្តូរវិញបានទេ",
      styles: const SunmiStyles(
        isBold: true,
        alignment: SunmiAlign.center,
        size: SunmiSize.sm,
      ),
    );

    MaxxSunmiPrinter.printText(
      "Powered by",
      styles: const SunmiStyles(
        isBold: true,
        alignment: SunmiAlign.center,
        size: SunmiSize.md,
      ),
    );

    MaxxSunmiPrinter.printText(
      "MAXX Creation Technology Co.,LTD",
      styles: const SunmiStyles(
        isBold: true,
        alignment: SunmiAlign.center,
        size: SunmiSize.sm,
      ),
    );
    MaxxSunmiPrinter.paperFeed();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Maxx Sunmi Printer',
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Maxx Sunmi Printer'),
          backgroundColor: const Color.fromRGBO(12, 47, 71, 1),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              Container(
                height: 40,
                width: 200,
                margin: const EdgeInsets.symmetric(vertical: 10),
                alignment: Alignment.center,
                color: connection == "Disconnect" ? Colors.red : Colors.green,
                child: Text(connection),
              ),
              ElevatedButton(
                onPressed: () async {
                  String result = await MaxxSunmiPrinter.initializePrinter();
                  setState(() {
                    connection = result;
                  });

                  print("result :$result");
                },
                child: Container(
                  height: 40,
                  width: 200,
                  alignment: Alignment.center,
                  child: const Text("初始化打印机"),
                ),
              ),
              ElevatedButton(
                onPressed: () async {
                  String result = await MaxxSunmiPrinter.printText("សួស្តីកម្ពុជា");
                  print("result : $result");
                  MaxxSunmiPrinter.paperFeed();
                },
                child: Container(
                  height: 40,
                  width: 200,
                  alignment: Alignment.center,
                  child: const Text("打印文本"),
                ),
              ),
              ElevatedButton(
                onPressed: () async {
                  ByteData bytes = await rootBundle.load('assets/logo.jpg');
                  final buffer = bytes.buffer;
                  final imgData = base64.encode(Uint8List.view(buffer));
                  MaxxSunmiPrinter.printImage(imgData, align: SunmiAlign.center);
                  MaxxSunmiPrinter.paperFeed(number: 1);
                },
                child: Container(
                  height: 40,
                  width: 200,
                  alignment: Alignment.center,
                  child: const Text("打印图像"),
                ),
              ),
              ElevatedButton(
                onPressed: () => MaxxSunmiPrinter.paperFeed(),
                child: Container(
                  height: 40,
                  width: 200,
                  alignment: Alignment.center,
                  child: const Text("进纸"),
                ),
              ),
              ElevatedButton(
                onPressed: () => MaxxSunmiPrinter.printTextLine(),
                child: Container(
                  height: 40,
                  width: 200,
                  alignment: Alignment.center,
                  child: const Text("打印文本线"),
                ),
              ),
              ElevatedButton(
                onPressed: () => MaxxSunmiPrinter.printBarcode("1234567890123"),
                child: Container(
                  height: 40,
                  width: 200,
                  alignment: Alignment.center,
                  child: const Text("打印条形码"),
                ),
              ),
              ElevatedButton(
                onPressed: () => MaxxSunmiPrinter.printQrCode("www.maxx4business.com"),
                child: Container(
                  height: 40,
                  width: 200,
                  alignment: Alignment.center,
                  child: const Text("打印二维码"),
                ),
              ),
              ElevatedButton(
                onPressed: () => printExample(),
                child: Container(
                  height: 40,
                  width: 200,
                  alignment: Alignment.center,
                  child: const Text("打印发票"),
                ),
              ),
              ElevatedButton(
                onPressed: () async {
                  String result = await MaxxSunmiPrinter.printLabel(description: "Coca Cola", barcode: "C1234567890123456", price: "តម្លៃ : 10.00\$");
                  print("result : $result");
                },
                child: Container(
                  height: 40,
                  width: 200,
                  alignment: Alignment.center,
                  child: const Text("打印标签"),
                ),
              ),
              // 贴纸
              ElevatedButton(
                onPressed: () async {
                  List<String> lineContents = [
                    "Name : Jackie",
                    "Addy: Phnom Penh, beng keng kong , st 292,",
                    "Tel: 010 35 28 20",
                    "A01,XL,White",
                    "\$50.00",
                  ];

                  String result = await MaxxSunmiPrinter.printSticker(
                    lineContents: lineContents,
                    styles: SunmiStyles(
                      isBold: true,
                      alignment: SunmiAlign.center,
                      size: SunmiSize.customSize(30),
                    ),
                  );
                  print("result : $result");
                },
                child: Container(
                  height: 40,
                  width: 200,
                  alignment: Alignment.center,
                  child: const Text("打印贴纸"),
                ),
              ),
              // 贴纸行
              ElevatedButton(
                onPressed: () async {
                  List<SunmiStickerLine> lineContents = [
                    SunmiStickerLine(
                      text: "Maxi Online Shopping",
                      styles: SunmiStyles(size: SunmiSize.customSize(30), isBold: true, alignment: SunmiAlign.center),
                    ),
                    SunmiStickerLine(text: "អតិថិជន:", styles: SunmiStyles(size: SunmiSize.customSize(20), isBold: true)),
                    SunmiStickerLine(text: "Sreng Vanhak", styles: SunmiStyles(size: SunmiSize.customSize(40), isBold: true)),
                    SunmiStickerLine(text: "ភ្នំពេញ", styles: SunmiStyles(size: SunmiSize.customSize(30), isBold: true)),
                    SunmiStickerLine(text: "010 35 28 20", styles: SunmiStyles(size: SunmiSize.customSize(30), isBold: true)),
                    SunmiStickerLine(text: "ទំនិញ:", styles: SunmiStyles(size: SunmiSize.customSize(20), isBold: true)),
                    SunmiStickerLine(text: "A01,XL,White", styles: SunmiStyles(size: SunmiSize.customSize(30), isBold: true)),
                    SunmiStickerLine(text: "\$50.00", styles: SunmiStyles(size: SunmiSize.customSize(40), isBold: true)),
                    const SunmiStickerLine(text: "A1 XL White 010352820 ភ្នំពេញ", styles: SunmiStyles(size: SunmiSize.md, isBold: true)),
                  ];

                  String result = await MaxxSunmiPrinter.printStickerLine(lineContents: lineContents, lineWrapTop: 0);
                  print("result : $result");
                },
                child: Container(
                  height: 40,
                  width: 200,
                  alignment: Alignment.center,
                  child: const Text("打印贴纸行"),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter打印机控制插件maxx_sunmi_printer的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter打印机控制插件maxx_sunmi_printer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用Flutter中的maxx_sunmi_printer插件来控制Sunmi打印机的基本示例代码。这个插件允许你在Flutter应用中直接与Sunmi品牌的打印机进行交互。

首先,确保你已经在pubspec.yaml文件中添加了maxx_sunmi_printer依赖:

dependencies:
  flutter:
    sdk: flutter
  maxx_sunmi_printer: ^最新版本号 # 请替换为实际的最新版本号

然后运行flutter pub get来安装依赖。

接下来,你可以在你的Flutter项目中编写代码来控制打印机。以下是一个简单的示例,展示如何初始化打印机、发送打印任务等:

import 'package:flutter/material.dart';
import 'package:maxx_sunmi_printer/maxx_sunmi_printer.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Sunmi Printer Demo'),
        ),
        body: Center(
          child: PrinterControlButton(),
        ),
      ),
    );
  }
}

class PrinterControlButton extends StatefulWidget {
  @override
  _PrinterControlButtonState createState() => _PrinterControlButtonState();
}

class _PrinterControlButtonState extends State<PrinterControlButton> {
  final MaxxSunmiPrinter _printer = MaxxSunmiPrinter();

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: () async {
        try {
          // 初始化打印机
          bool isInitialized = await _printer.initPrinter();
          if (isInitialized) {
            print('Printer initialized successfully.');

            // 准备打印内容
            String printData = 'Hello, Sunmi Printer!\nThis is a test print.';

            // 发送打印任务
            bool isPrinted = await _printer.printText(printData);
            if (isPrinted) {
              print('Print task sent successfully.');
            } else {
              print('Failed to send print task.');
            }

            // 关闭打印机连接(可选,根据需求来决定是否调用)
            await _printer.closePrinter();
          } else {
            print('Failed to initialize printer.');
          }
        } catch (e) {
          print('Error: $e');
        }
      },
      child: Text('Print Text'),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮。当用户点击按钮时,应用会尝试初始化Sunmi打印机,发送一个简单的文本打印任务,并在完成后关闭打印机连接(这一步是可选的,取决于你的具体需求)。

请注意,这个示例代码假设你已经正确连接了Sunmi打印机,并且该打印机支持通过蓝牙或USB等方式与你的设备进行通信。根据实际的打印机型号和连接方式,可能需要进行额外的配置和初始化步骤。

此外,maxx_sunmi_printer插件的具体API和用法可能会随着版本的更新而有所变化,因此请参考最新的官方文档以获取最准确的信息。

回到顶部