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

发布于 1周前 作者 itying888 来自 Flutter

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

平台支持

该插件仅在Android平台上工作。

使用方法

要使用此插件,需要在项目的pubspec.yaml文件中添加依赖项:

dependencies:
  flutter_sunmi_printer_plus: ^最新版本号

此插件的功能

  • ✅ 打印文本(字体大小、加粗或不加粗、对齐方式等)
  • ✅ 打印图像(可以设置对齐方式)
  • ✅ 打印表格
  • ✅ 打印二维码(带样式)
  • ✅ 打印条形码(带样式)
  • ✅ 跳转n行
  • ✅ 切纸

示例代码

导入库:

import 'package:flutter_sunmi_printer_plus/flutter_sunmi_printer_plus.dart';

初始化打印机:

[@override](/user/override)
void initState() {
  super.initState();
  Future.delayed(Duration.zero, () async {
    try {
      isConnected = await SunmiPrinter.initPrinter() ?? false;
      setState(() {});
    } catch (err) {
      errorMessage = err.toString();
    }
    setState(() {});
  });
}
打印文本
await SunmiPrinter.printText(
  content: "Test String",
  style: SunmiStyle(
    fontSize: 20,
    isUnderLine: true,
    bold: false,
    align: SunmiPrintAlign.LEFT,
  ),
);
打印图像
Uint8List bytes = await _getImageFromAsset('assets/print_logo.jpeg');
await SunmiPrinter.printImage(image: bytes, align: SunmiPrintAlign.CENTER);
打印表格
await SunmiPrinter.printTable(cols: [
  ColumnMaker(text: "test#1", align: SunmiPrintAlign.LEFT, width: 5),
  ColumnMaker(text: "test#2", align: SunmiPrintAlign.LEFT, width: 5),
]);
打印条形码
await SunmiPrinter.printBarCode(
  data: "1234567890",
  height: 50,
  width: 2,
  textPosition: SunmiBarcodeTextPos.TEXT_UNDER,
  barcodeType: SunmiBarcodeType.CODE128,
  align: SunmiPrintAlign.CENTER,
);
打印二维码
await SunmiPrinter.printQr(
  data: "https://twitter.com/wojoodtech",
  align: SunmiPrintAlign.CENTER,
  size: 5,
);

完整的示例代码可以在example/lib/main.dart中查看。

完整示例代码

import 'dart:typed_data';

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

import 'package:flutter/services.dart';
import 'package:flutter_sunmi_printer_plus/flutter_sunmi_printer_plus.dart';
import 'package:flutter_sunmi_printer_plus/sunmi_style.dart';
import 'package:flutter_sunmi_printer_plus/enums.dart';
import 'package:flutter_sunmi_printer_plus/column_maker.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 errorMessage = '';
  int? sunmiPrinter;
  bool isConnected = false;

  [@override](/user/override)
  void initState() {
    super.initState();
    Future.delayed(Duration.zero, () async {
      try {
        isConnected = await SunmiPrinter.initPrinter() ?? false;
        setState(() {});
      } catch (err) {
        errorMessage = err.toString();
      }
      setState(() {});
    });
  }

  Future<Uint8List> readFileBytes(String path) async {
    try {
      ByteData fileData = await rootBundle.load(path);
      Uint8List fileUnit8List = fileData.buffer
          .asUint8List(fileData.offsetInBytes, fileData.lengthInBytes);
      return fileUnit8List;
    } catch (err) {
      rethrow;
    }
  }

  Future<Uint8List> _getImageFromAsset(String iconPath) async {
    return await readFileBytes(iconPath);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Padding(
          padding: const EdgeInsets.symmetric(horizontal: 15),
          child: Column(
            children: [
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: [
                  ElevatedButton(
                    child: const Text("打印文本"),
                    onPressed: () async {
                      try {
                        await SunmiPrinter.printText(
                          content: "Test String",
                          style: SunmiStyle(
                            fontSize: 20,
                            isUnderLine: true,
                            bold: false,
                            align: SunmiPrintAlign.LEFT,
                          ),
                        );
                        await SunmiPrinter.lineWrap(1);
                        await SunmiPrinter.printText(
                          content: "Test String #2",
                          style: SunmiStyle(
                            fontSize: 24,
                            isUnderLine: false,
                            bold: true,
                            align: SunmiPrintAlign.CENTER,
                          ),
                        );
                        await SunmiPrinter.feedPaper();
                      } catch (err) {
                        errorMessage = err.toString();
                        setState(() {});
                      }
                    },
                  ),
                  ElevatedButton(
                    child: const Text("打印阿拉伯文"),
                    onPressed: () async {
                      try {
                        await SunmiPrinter.printText(
                          content: "نص تجريبي",
                          style: SunmiStyle(
                            fontSize: 24,
                            isUnderLine: false,
                            bold: true,
                            align: SunmiPrintAlign.RIGHT,
                          ),
                        );
                        await SunmiPrinter.lineWrap(1);
                        await SunmiPrinter.printText(
                          content: "نص تجريبي",
                          style: SunmiStyle(
                            fontSize: 24,
                            isUnderLine: false,
                            bold: true,
                            align: SunmiPrintAlign.CENTER,
                          ),
                        );
                        await SunmiPrinter.lineWrap(1);
                        await SunmiPrinter.printText(
                          content: "نص تجريبي",
                          style: SunmiStyle(
                            fontSize: 24,
                            isUnderLine: false,
                            bold: true,
                            align: SunmiPrintAlign.LEFT,
                          ),
                        );
                        await SunmiPrinter.lineWrap(1);
                        await SunmiPrinter.feedPaper();
                        await SunmiPrinter.cutPaper();
                      } catch (err) {
                        errorMessage = err.toString();
                        setState(() {});
                      }
                    },
                  ),
                ],
              ),
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: [
                  ElevatedButton(
                    child: const Text("打印图像"),
                    onPressed: () async {
                      try {
                        Uint8List bytes = await _getImageFromAsset('assets/print_logo.jpeg');
                        await SunmiPrinter.printImage(image: bytes, align: SunmiPrintAlign.CENTER);
                        await SunmiPrinter.lineWrap(1);
                        await SunmiPrinter.feedPaper();
                        await SunmiPrinter.cutPaper();
                      } catch (err) {
                        errorMessage = err.toString();
                        setState(() {});
                      }
                    },
                  ),
                  ElevatedButton(
                    child: const Text("打印二维码"),
                    onPressed: () async {
                      try {
                        await SunmiPrinter.printQr(
                          data: "https://twitter.com/wojoodtech",
                          align: SunmiPrintAlign.CENTER,
                          size: 5,
                        );
                        await SunmiPrinter.lineWrap(1);
                        await SunmiPrinter.feedPaper();
                        await SunmiPrinter.cutPaper();
                      } catch (err) {
                        errorMessage = err.toString();
                        setState(() {});
                      }
                    },
                  ),
                ],
              ),
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: [
                  ElevatedButton(
                    child: const Text("打印条形码"),
                    onPressed: () async {
                      try {
                        await SunmiPrinter.printBarCode(
                          data: "1234567890",
                          height: 50,
                          width: 2,
                          textPosition: SunmiBarcodeTextPos.TEXT_UNDER,
                          barcodeType: SunmiBarcodeType.CODE128,
                          align: SunmiPrintAlign.CENTER,
                        );
                        await SunmiPrinter.lineWrap(1);
                        await SunmiPrinter.feedPaper();
                        await SunmiPrinter.cutPaper();
                      } catch (err) {
                        errorMessage = err.toString();
                        setState(() {});
                      }
                    },
                  ),
                  ElevatedButton(
                    child: const Text("打印表格"),
                    onPressed: () async {
                      try {
                        await SunmiPrinter.printTable(cols: [
                          ColumnMaker(text: "test#1", align: SunmiPrintAlign.LEFT, width: 5),
                          ColumnMaker(text: "test#2", align: SunmiPrintAlign.LEFT, width: 5),
                        ]);
                        await SunmiPrinter.printTable(cols: [
                          ColumnMaker(text: "test#3", align: SunmiPrintAlign.LEFT, width: 5),
                          ColumnMaker(text: "test#4", align: SunmiPrintAlign.LEFT, width: 5),
                        ]);
                        await SunmiPrinter.lineWrap(1);
                        await SunmiPrinter.feedPaper();
                        await SunmiPrinter.cutPaper();
                      } catch (err) {
                        errorMessage = err.toString();
                        setState(() {});
                      }
                    },
                  ),
                ],
              ),
              const SizedBox(height: 15),
              Text("打印机已连接: ${SunmiPrinter.isConnected}"),
              Text("错误信息: $errorMessage"),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何使用Flutter打印机控制插件flutter_sunmi_printer_plus的代码示例。这个插件通常用于控制Sunmi品牌的打印机进行打印操作。请确保你已经在pubspec.yaml文件中添加了该依赖,并且已经正确运行了flutter pub get

1. 添加依赖

首先,在你的pubspec.yaml文件中添加flutter_sunmi_printer_plus依赖:

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

2. 导入插件

在你的Dart文件中导入插件:

import 'package:flutter_sunmi_printer_plus/flutter_sunmi_printer_plus.dart';

3. 初始化插件并打印文本

下面是一个简单的示例,展示如何初始化插件并发送文本到打印机进行打印:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Sunmi Printer Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: _printText,
            child: Text('Print Text'),
          ),
        ),
      ),
    );
  }

  Future<void> _printText() async {
    // 初始化打印机插件
    FlutterSunmiPrinterPlus printer = FlutterSunmiPrinterPlus();

    // 打印文本内容
    String textToPrint = "Hello, Flutter Sunmi Printer!\nThis is a test print.";
    try {
      bool success = await printer.printText(textToPrint);
      if (success) {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('Print successful!')),
        );
      } else {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('Print failed!')),
        );
      }
    } catch (e) {
      print("Error printing: $e");
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Error: $e')),
      );
    }
  }
}

4. 运行应用

确保你的设备已经连接了Sunmi打印机,并且已经授予了必要的权限(如蓝牙权限等,具体取决于你的打印机连接方式)。然后运行你的Flutter应用,点击按钮即可尝试打印文本。

注意事项

  • 不同的打印机型号和连接方式可能需要不同的初始化步骤和权限设置。
  • 插件的API可能会随着版本更新而变化,请参考最新的官方文档以确保兼容性。
  • 如果遇到权限问题或连接问题,请检查设备的设置和日志输出,以便进行调试。

希望这个示例能帮助你开始使用flutter_sunmi_printer_plus插件进行打印机控制。如果你有更具体的需求或遇到问题,可以查阅官方文档或提出具体的问题。

回到顶部