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.
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 |
Android | iOS | Description | |
---|---|---|---|
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. |
dependencies:
flutter:
sdk: flutter
bluetooth_print_plus: ^2.3.4
We need to add the permission to use Bluetooth and access location:
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"/>
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
import 'package:bluetooth_print_plus/bluetooth_print_plus.dart';
final _bluetoothPrintPlus = BluetoothPrintPlus.instance;
_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;
}
});
_bluetoothPrintPlus.receivedData.listen((data) {
print('********** received data: $data **********');
/// received data, do something...
});
// 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(),
),
)
await _bluetoothPrintPlus.connect(_device);
await _bluetoothPrintPlus.disconnect();
or
await BluetoothPrintPlus.instance.disconnect();
/// 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);
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>