搜索插件、代码仓与 APP 分类

GitHub 代码仓diantahoc/flutter_pos_printer_platform

flutter_pos_printer_platform

一个可在不同平台(如 Android、iOS、Windows)以及不同接口(蓝牙和 BLE、TCP 和 USB)上向打印机发送 ESC 命令的库

flutter_pos_printer_platform 项目封面
星标
16
复刻
79
最近推送(UTC)
2024年12月6日
项目状态
未归档

原始 README

以下为英文项目原文快照,最新内容请访问 GitHub。

flutter_pos_printer_platform

Pub Version

Notice: This library was initially forked from arthas1888 in order to use it in a flutter project that use both image v4 and image v3 dart libraries. And since then, the library received many bug fixes after the original library was discontinued.


A library to discover printers, and send printer commands.

This library allows to print esc commands to printers in different platforms such as android, ios, windows and different interfaces as Bluetooth and BLE, USB and Wifi/Ethernet

Inspired by flutter_pos_printer.

Main Features

  • Android, iOS and Windows support
  • Scan for bluetooth devices
  • Send raw List<int> bytes data to a device, review this library to generate ESC/POS commands flutter_esc_pos_utils.

Features

Android iOS Windows Description
USB interface :white_check_mark: :white_square_button: :white_check_mark: Allows connection with usb devices.
Bluetooth classic interface :white_check_mark: :white_square_button: :white_square_button: Allows connection with classic bt devices.
Bluetooth low energy (BLE) interface :white_check_mark: :white_check_mark: :white_square_button: Allows connection with bt BLE devices.
Net (ethernet/wifi) interface :white_check_mark: :white_check_mark: :white_check_mark: Allows connection with network devices.
scan :white_check_mark: :white_check_mark: :white_check_mark: Starts a scan for only Bluetooth devices or network devices(Android/iOS).
connect :white_check_mark: :white_check_mark: :white_check_mark: Establishes a connection to the device.
disconnect :white_check_mark: :white_check_mark: :white_check_mark: Cancels an active or pending connection to the device.
state :white_check_mark: :white_check_mark: :white_check_mark: Stream of state changes for the Bluetooth Device.
print :white_check_mark: :white_check_mark: :white_check_mark: print bytes.

Getting Started

For a full example please check /example folder. Here are only the most important parts of the code to illustrate how to use the library.

Generate bytes to print through flutter_esc_pos_utils.

    import 'package:esc_pos_utils/esc_pos_utils.dart';

    final profile = await CapabilityProfile.load();
    final generator = Generator(PaperSize.mm58, profile);
    List<int> bytes = [];

    bytes += generator.text('Test Print', styles: const PosStyles(align: PosAlign.center));
    bytes += generator.text('Product 1');
    bytes += generator.text('Product 2');

Android

Allow to connect bluetooth (classic and BLE), USB and network devices

Change the minSdkVersion for Android

flutter_pos_printer_platform is compatible only from version 21 of Android SDK so you should change this in android/app/build.gradle:

In build.gradle set

    defaultConfig {
        ...
        minSdkVersion 21
        targetSdkVersion 31
        ...

select type of device PrinterType ( bluetooth, usb, network)

if select bluetooth you can send optional params

  • isBle -> allow to connect with bluetooth that supports this technology
  • autoconnect -> allow to reconnect when state of device is None

iOS

Allow to connect bluetooth (BLE) and network devices

Windows

Allow to connect USB and network devices To network devices is necessary to set ipAddress

How to use it

init a PrinterManager instance
import 'package:flutter_pos_printer_platform/flutter_pos_printer_platform.dart';

    var printerManager = PrinterManager.instance;

scan
    var devices = [];
    _scan(PrinterType type, {bool isBle = false}) {
        // Find printers
        PrinterManager.instance.discovery(type: type, isBle: isBle).listen((device) {
            devices.add(device);
        });
    }
connect
_connectDevice(PrinterDevice selectedPrinter, PrinterType type, {bool reconnect = false, bool isBle = false, String? ipAddress = null}) async {
    switch (type) {
      // only windows and android
      case PrinterType.usb:
        await PrinterManager.instance.connect(
            type: type,
            model: UsbPrinterInput(name: selectedPrinter.name, productId: selectedPrinter.productId, vendorId: selectedPrinter.vendorId));
        break;
      // only iOS and android
      case PrinterType.bluetooth:
        await PrinterManager.instance.connect(
            type: type,
            model: BluetoothPrinterInput(
                name: selectedPrinter.name,
                address: selectedPrinter.address!,
                isBle: isBle,
                autoConnect: reconnect));
        break;
      case PrinterType.network:
        await PrinterManager.instance.connect(type: type, model: TcpPrinterInput(ipAddress: ipAddress ?? selectedPrinter.address!));
        break;
      default:
    }
  }
disconnect
    _disconnectDevice(PrinterType type) async {
        await PrinterManager.instance.disconnect(type: type);
        }
listen bluetooth state
    PrinterManager.instance.stateBluetooth.listen((status) {
      log(' ----------------- status bt $status ------------------ ');
    });
send bytes to print
    _sendBytesToPrint(List<int> bytes, PrinterType type) async { 
      PrinterManager.instance.send(type: type, bytes: bytes);
    }

Troubleshooting

error:'State restoration of CBCentralManager is only allowed for applications that have specified the "bluetooth-central" background mode' info.plist add:

<key>NSBluetoothAlwaysUsageDescription</key>
<string>Allow App use bluetooth?</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>Allow App use bluetooth?</string>
<key>UIBackgroundModes</key>
<array>
    <string>bluetooth-central</string>
    <string>bluetooth-peripheral</string>
</array>

Credits

  • https://github.com/andrey-ushakov/esc_pos_utils
  • https://github.com/bailabs/esc-pos-printer-flutter
  • https://github.com/feedmepos/flutter_printer/tree/master/packages/flutter_pos_printer
  • https://pub.dev/packages/flutter_pos_printer_platform

Support Original Author

If you think that this project has helped you with your developments, you can support this project, any support is much appreciated.

Paypal

diantahoc GitHub avatar
GitHub 作者

diantahoc ↗

语言KotlinDartC++Objective-CCMakeRubyCSwift

此仓库发布的插件

使用的依赖

依赖清单 7 项

如何选择适合项目的代码仓?

先按使用场景筛选,再比较项目活跃情况,最后到原始仓库核对使用要求。

  1. 通过仓库名、作者或描述搜索,再按技术分类缩小范围。
  2. 结合星标、复刻与最近推送比较项目;星标反映社区关注,不代表质量保证。
  3. 使用前在 GitHub 核对 README、许可证与 Issues。

来源与维护

“A repository is the most basic element of GitHub.”

GitHub Docs — About repositories ↗