pub package

Introduction

BluetoothPrint is a bluetooth plugin for Flutter, a new mobile SDK to help developers build bluetooth thermal printer apps for both iOS and Android.(for example, Gprinter pt-280、pt-380、gp-1324、gp-2120 eg.)

verison

2.0.0(flutter 1.12)
1.2.0(flutter 1.9)

Features

AndroidiOSDescription
scan:white_check_mark::white_check_mark:Starts a scan for Bluetooth Low Energy devices.
connect:white_check_mark::white_check_mark:Establishes a connection to the device.
disconnect:white_check_mark::white_check_mark:Cancels an active or pending connection to the device.
state:white_check_mark::white_check_mark:Stream of state changes for the Bluetooth Device.
print test message:white_check_mark::white_check_mark:print device test message.
print text:white_check_mark::white_check_mark:print custom text, support layout.
print image:white_check_mark::white_check_mark:print image.
print qrcode:white_check_mark::white_check_mark:print qrcode,support change size.
print barcode:white_check_mark::white_check_mark:print barcode

Usage

Example

To use this plugin :

  dependencies:
    flutter:
      sdk: flutter
    bluetooth_print:
  • init a BluetoothPrint instance
import 'package:bluetooth_print/bluetooth_print.dart';
import 'package:bluetooth_print/bluetooth_print_model.dart';


BluetoothPrint bluetoothPrint = BluetoothPrint.instance;

scan

// begin scan
bluetoothPrint.startScan(timeout: Duration(seconds: 4));

// get devices
StreamBuilder<List<BluetoothDevice>>(
    stream: bluetoothPrint.scanResults,
    initialData: [],
    builder: (c, snapshot) => Column(
      children: snapshot.data.map((d) => ListTile(
        title: Text(d.name??''),
        subtitle: Text(d.address),
        onTap: () async {
          setState(() {
            _device = d;
          });
        },
        trailing: _device!=null && _device.address == d.address?Icon(
          Icons.check,
          color: Colors.green,
        ):null,
      )).toList(),
    ),
  ),

connect

await bluetoothPrint.connect(_device);

disconnect

await bluetoothPrint.disconnect();

listen state

      bluetoothPrint.state.listen((state) {
      print('cur device status: $state');

      switch (state) {
        case BluetoothPrint.CONNECTED:
          setState(() {
            _connected = true;
          });
          break;
        case BluetoothPrint.DISCONNECTED:
          setState(() {
            _connected = false;
          });
          break;
        default:
          break;
      }
    });
    Map<String, dynamic> config = Map();
    List<LineText> list = List();
    list.add(LineText(type: LineText.TYPE_TEXT, content: 'A Title', weight: 1, align: LineText.ALIGN_CENTER,linefeed: 1));
    list.add(LineText(type: LineText.TYPE_TEXT, content: 'this is conent left', weight: 0, align: LineText.ALIGN_LEFT,linefeed: 1));
    list.add(LineText(type: LineText.TYPE_TEXT, content: 'this is conent right', align: LineText.ALIGN_RIGHT,linefeed: 1));
    list.add(LineText(linefeed: 1));
    list.add(LineText(type: LineText.TYPE_BARCODE, content: 'A12312112', size:10, align: LineText.ALIGN_CENTER, linefeed: 1));
    list.add(LineText(linefeed: 1));
    list.add(LineText(type: LineText.TYPE_QRCODE, content: 'qrcode i', size:10, align: LineText.ALIGN_CENTER, linefeed: 1));
    list.add(LineText(linefeed: 1));

    ByteData data = await rootBundle.load("assets/images/guide3.png");
    List<int> imageBytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
    String base64Image = base64Encode(imageBytes);
    list.add(LineText(type: LineText.TYPE_IMAGE, content: base64Image, align: LineText.ALIGN_CENTER, linefeed: 1));

    await bluetoothPrint.printReceipt(config, list);
    Map<String, dynamic> config = Map();
    config['width'] = 40; // 标签宽度,单位mm
    config['height'] = 70; // 标签高度,单位mm
    config['gap'] = 2; // 标签间隔,单位mm

    // x、y坐标位置,单位dpi,1mm=8dpi
    List<LineText> list = List();
    list.add(LineText(type: LineText.TYPE_TEXT, x:10, y:10, content: 'A Title'));
    list.add(LineText(type: LineText.TYPE_TEXT, x:10, y:40, content: 'this is content'));
    list.add(LineText(type: LineText.TYPE_QRCODE, x:10, y:70, content: 'qrcode i\n'));
    list.add(LineText(type: LineText.TYPE_BARCODE, x:10, y:190, content: 'qrcode i\n'));

    List<LineText> list1 = List();
    ByteData data = await rootBundle.load("assets/images/guide3.png");
    List<int> imageBytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
    String base64Image = base64Encode(imageBytes);
    list1.add(LineText(type: LineText.TYPE_IMAGE, x:10, y:10, content: base64Image,));

    await bluetoothPrint.printLabel(config, list);
    await bluetoothPrint.printLabel(config, list1);

Troubleshooting

ios import third party library

[Please Read link: https://stackoverflow.com/questions/19189463/cocoapods-podspec-issue)
*.podspec add:

# .a filename must begin with lib, eg. 'libXXX.a'
s.vendored_libraries = '**/*.a'

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>

Thanks For

Libraries

bluetooth_print
bluetooth_print_model