bluetooth_print_plus 2.3.4 copy "bluetooth_print_plus: ^2.3.4" to clipboard
bluetooth_print_plus: ^2.3.4 copied to clipboard

bluetooth_print_plus is a flutter plugin for bluetooth thermal printer, support Android & iOS, supports tspl/tsc、cpcl、esc pos.

pub package

Introduction #

Bluetooth Print Plus is a Bluetooth plugin used to print thermal printers in Flutter, a new mobile SDK to help developers build bluetooth thermal printer apps for iOS and Android.

Important, important, important. First, you need to run the demo to confirm the printer command type ! ! ! now support tspl/tsc、cpcl、esc pos. If this plugin is helpful to you, please give it a like, Thanks.

FAQ Support #

QQ group     TG group

Buy Me A Coffee/请我喝杯咖啡 #

Plan #

Version plan
1.1.x blue and tsc command, esc print image command
1.5.x support cpcl command
2.x.x improve esc command
3.x.x support zpl command

Features #

Android iOS Description
scan Starts a scan for Bluetooth Low Energy devices.
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.

Usage #

Example

To use this plugin : #

dependencies:
  flutter:
    sdk: flutter
  bluetooth_print_plus: ^2.3.4

Add permissions for Bluetooth #


We need to add the permission to use Bluetooth and access location:

Android

In the android/app/src/main/AndroidManifest.xml let’s add:

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

IOS

In the ios/Runner/Info.plist let’s add:

<key>NSBluetoothAlwaysUsageDescription</key>
<string>Need BLE permission</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>Need BLE permission</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Need Location permission</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>Need Location permission</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Need Location permission</string>

For location permissions on iOS see more at: https://developer.apple.com/documentation/corelocation/requesting_authorization_for_location_services

init a BluetoothPrint instance #

import 'package:bluetooth_print_plus/bluetooth_print_plus.dart';

final _bluetoothPrintPlus = BluetoothPrintPlus.instance;

listen #

  • state
_bluetoothPrintPlus.state.listen((state) {
  print('********** state change: $state **********');
  switch(state) {
    case BPPState.blueOn:
      /// blueOn, do something
      break;
    case BPPState.blueOff:
      /// blueOff, do something
      break;
    case BPPState.deviceConnected:
      /// deviceConnected, do something
      break;
    case BPPState.deviceDisconnected:
      /// deviceDisconnected, do something
      break;
  }
});
  • received Data
_bluetoothPrintPlus.receivedData.listen((data) {
  print('********** received data: $data **********');
  /// received data, do something...
});

scan #

// begin scan
_bluetoothPrintPlus.startScan(timeout: const Duration(seconds: 30));

// get devices
StreamBuilder<List<BluetoothDevice>>(
  stream: _bluetoothPrintPlus.scanResults,
  initialData: [],
  builder: (c, snapshot) => ListView(
    children: snapshot.data!.map((d) => Container(
      padding: const EdgeInsets.only(left: 10, right: 10, bottom: 5),
      child: Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [ .... ],
          ),
    )).toList(),
  ),
)

connect #

await _bluetoothPrintPlus.connect(_device);

disconnect #

await _bluetoothPrintPlus.disconnect();
or
await  BluetoothPrintPlus.instance.disconnect();

print/write #

/// for example: write tsc command
final ByteData bytes = await rootBundle.load("assets/dithered-image.png");
final Uint8List image = bytes.buffer.asUint8List();
await tscCommand.cleanCommand();
await tscCommand.cls();
await tscCommand.size(width: 76, height: 130);
await tscCommand.image(image: image, x: 50, y: 60);
await tscCommand.print(1);
final cmd = await tscCommand.getCommand();
if (cmd == null) return;
BluetoothPrintPlus.instance.write(cmd);

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>

Stargazers over time #

Stargazers over time

25
likes
155
pub points
87%
popularity

Publisher

unverified uploader

bluetooth_print_plus is a flutter plugin for bluetooth thermal printer, support Android & iOS, supports tspl/tsc、cpcl、esc pos.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

flutter

More

Packages that depend on bluetooth_print_plus