thermal_printer 1.0.5 copy "thermal_printer: ^1.0.5" to clipboard
thermal_printer: ^1.0.5 copied to clipboard

A flutter plugin that prints esc commands to printers in different platforms such as android, ios, windows and different interfaces Bluetooth and BLE, TCP and USB

thermal_printer #

Pub Version

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 🔳 Allows connection with usb devices.
Bluetooth classic interface 🔳 🔳 Allows connection with classic bt devices.
Bluetooth low energy (BLE) interface 🔳 Allows connection with bt BLE devices.
Net (ethernet/wifi) interface Allows connection with network devices.
scan Starts a scan for only Bluetooth devices or network devices(Android/iOS).
connect Establishes a connection to the device.
disconnect Cancels an active or pending connection to the device.
state Stream of state changes for the Bluetooth Device.
print 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 #

thermal_printer 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 19
        targetSdkVersion 33
        ...

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

USB: you can enable the native broadcast receiver to notify connected usb devices put the following code in AndroidManifest

   <receiver
        android:name="com.codingdevs.thermal_printer.usb.UsbReceiver"
        android:exported="false">

        <intent-filter>
            <action android:name="android.hardware.usb.action.ACTION_USB_PERMISSION" />
            <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
            
        </intent-filter>
    </receiver>

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:thermal_printer/thermal_printer.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 #

32
likes
130
pub points
90%
popularity

Publisher

verified publishercodingdevs.com

A flutter plugin that prints esc commands to printers in different platforms such as android, ios, windows and different interfaces Bluetooth and BLE, TCP and USB

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

dart_ping, enum_to_string, flutter, gbk_codec, hex, image, network_info_plus, ping_discover_network_forked, rxdart

More

Packages that depend on thermal_printer