v2.4.6
bluetooth_print_plus
bluetooth_print_plus는 블루투스 열전사 프린터용 플러터 플러그인으로, 안드로이드 및 iOS를 지원하며, TSPL/TSC, CPCL, ESC/POS를 지원합니다.
63좋아요 1.7천30일 다운로드135Pub 점수
AndroidiOSWebmacOSLinux
Android 및 iOS를 지원하는 블루투스 열전사 프린터용 플러터 플러그인
{"sdk":"flutter"}^0.28.0{"sdk":"flutter"}아래는 영문 원문 스냅샷입니다. 최신 내용은 GitHub에서 확인하세요.
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.4.5
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>
import 'package:bluetooth_print_plus/bluetooth_print_plus.dart';
BluetoothPrintPlus.isBlueOn;
BluetoothPrintPlus.isScanning;
BluetoothPrintPlus.isConnected;
late StreamSubscription<bool> _isScanningSubscription;
late StreamSubscription<BlueState> _blueStateSubscription;
late StreamSubscription<ConnectState> _connectStateSubscription;
late StreamSubscription<Uint8List> _receivedDataSubscription;
late StreamSubscription<List<BluetoothDevice>> _scanResultsSubscription;
late List<BluetoothDevice> _scanResults;
/// listen scanResults
_scanResultsSubscription = BluetoothPrintPlus.scanResults.listen((event) {
if (mounted) {
setState(() {
_scanResults = event;
});
}
});
/// listen isScanning
_isScanningSubscription = BluetoothPrintPlus.isScanning.listen((event) {
print('********** isScanning: $event **********');
if (mounted) {
setState(() {});
}
});
/// listen blue state
_blueStateSubscription = BluetoothPrintPlus.blueState.listen((event) {
print('********** blueState change: $event **********');
/// blue state changed, do something...
});
/// listen connect state
_blueStateSubscription = _BluetoothPrintPlus.connectState.listen((event) {
print('********** connectState change: $event **********');
/// connect state changed, do something...
});
_BluetoothPrintPlus.receivedData.listen((data) {
print('********** received data: $data **********');
/// received data, do something...
});
// begin scan
await BluetoothPrintPlus.startScan(timeout: Duration(seconds: 10));
// get devices
_scanResultsSubscription = BluetoothPrintPlus.scanResults.listen((event) {
if (mounted) {
setState(() {
_scanResults = event;
});
}
});
await BluetoothPrintPlus.connect(_device);
await BluetoothPrintPlus.disconnect();
final ByteData bytes = await rootBundle.load("assets/dithered-image.png");
/// write tsc command, for example:
final Uint8List image = bytes.buffer.asUint8List();
await tscCommand.cleanCommand();
await tscCommand.size(width: 76, height: 130);
await tscCommand.cls(); // most after size
await tscCommand.image(image: image, x: 50, y: 60);
await tscCommand.print(1);
final cmd = await tscCommand.getCommand();
if (cmd == null) return;
BluetoothPrintPlus.write(cmd);
/// write cpcl command, for example:
await cpclCommand.cleanCommand();
await cpclCommand.size(width: 76 * 8, height: 76 * 8);
await cpclCommand.image(image: image, x: 10, y: 10);
await cpclCommand.print();
final cmd = await cpclCommand.getCommand();
if (cmd == null) return;
BluetoothPrintPlus.write(cmd);
/// write esc command, for example:
await escCommand.cleanCommand();
await escCommand.print();
await escCommand.image(image: image);
await escCommand.print();
final cmd = await escCommand.getCommand();
if (cmd == null) return;
BluetoothPrintPlus.write(cmd);
@override
void dispose() {
super.dispose();
_isScanningSubscription.cancel();
_blueStateSubscription.cancel();
_connectStateSubscription.cancel();
_receivedDataSubscription.cancel();
_scanResultsSubscription.cancel();
_scanResults.clear();
_device = null;
}
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>