Flutter蓝牙热敏打印机控制插件flutter_esc_pos_bluetooth的使用
Flutter蓝牙热敏打印机控制插件flutter_esc_pos_bluetooth的使用
esc_pos_bluetooth
该库允许使用蓝牙打印机打印收据。对于WiFi/以太网打印机,请使用esc_pos_printer库。
TODO (PRs是受欢迎的!)
- 将字节数据拆分成块:问题
- 使用
GS ( k
命令打印QR码(已支持从图像打印QR码) - 使用
GS ( k
命令打印PDF-417条形码 - 使用
ESC 3 <n>
命令设置行间距
如何帮助
- 测试你的打印机并添加到表格中:WiFi/网络打印机 或 蓝牙打印机
- 测试并报告错误
- 分享你对改进的建议(代码优化,新功能等)
- PR是受欢迎的!
已测试打印机
以下是一些已用此库测试过的打印机。请添加你测试过的模型,以维护和改进此库,并帮助其他人选择合适的打印机。
生成收据
简单带样式的收据
Ticket testTicket() {
final Ticket ticket = Ticket(PaperSize.mm80);
ticket.text(
'Regular: aA bB cC dD eE fF gG hH iI jJ kK lL mM nN oO pP qQ rR sS tT uU vV wW xX yY zZ');
ticket.text('Special 1: àÀ èÈ éÉ ûÛ üÜ çÇ ôÔ',
styles: PosStyles(codeTable: PosCodeTable.westEur));
ticket.text('Special 2: blåbærgrød',
styles: PosStyles(codeTable: PosCodeTable.westEur));
ticket.text('Bold text', styles: PosStyles(bold: true));
ticket.text('Reverse text', styles: PosStyles(reverse: true));
ticket.text('Underlined text',
styles: PosStyles(underline: true), linesAfter: 1);
ticket.text('Align left', styles: PosStyles(align: PosAlign.left));
ticket.text('Align center', styles: PosStyles(align: PosAlign.center));
ticket.text('Align right',
styles: PosStyles(align: PosAlign.right), linesAfter: 1);
ticket.text('Text size 200%',
styles: PosStyles(
height: PosTextSize.size2,
width: PosTextSize.size2,
));
ticket.feed(2);
ticket.cut();
return ticket;
}
你可以在这里找到更多例子:esc_pos_utils。
打印收据
PrinterBluetoothManager printerManager = PrinterBluetoothManager();
printerManager.scanResults.listen((printers) async {
// 存储找到的打印机
});
printerManager.startScan(Duration(seconds: 4));
// ...
printerManager.selectPrinter(printer);
final PosPrintResult res = await printerManager.printTicket(testTicket());
print('打印结果: ${res.msg}');
更多关于Flutter蓝牙热敏打印机控制插件flutter_esc_pos_bluetooth的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter蓝牙热敏打印机控制插件flutter_esc_pos_bluetooth的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_esc_pos_bluetooth
是一个用于在 Flutter 应用中控制蓝牙热敏打印机的插件。它基于 ESC/POS 指令集,允许你通过蓝牙连接打印机并发送打印指令。以下是如何使用 flutter_esc_pos_bluetooth
插件的基本步骤。
1. 添加依赖
首先,在你的 pubspec.yaml
文件中添加 flutter_esc_pos_bluetooth
依赖:
dependencies:
flutter:
sdk: flutter
flutter_esc_pos_bluetooth: ^0.3.0
然后运行 flutter pub get
来安装依赖。
2. 请求蓝牙权限
在 Android 和 iOS 上,使用蓝牙功能需要相应的权限。确保在 AndroidManifest.xml
和 Info.plist
中添加必要的权限。
AndroidManifest.xml:
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
Info.plist:
<key>NSBluetoothAlwaysUsageDescription</key>
<string>We need access to Bluetooth to connect to the printer.</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>We need access to Bluetooth to connect to the printer.</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>We need access to location to scan for Bluetooth devices.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>We need access to location to scan for Bluetooth devices.</string>
3. 扫描并连接蓝牙设备
使用 flutter_esc_pos_bluetooth
插件扫描并连接到蓝牙打印机。
import 'package:flutter/material.dart';
import 'package:flutter_esc_pos_bluetooth/flutter_esc_pos_bluetooth.dart';
class PrinterScreen extends StatefulWidget {
[@override](/user/override)
_PrinterScreenState createState() => _PrinterScreenState();
}
class _PrinterScreenState extends State<PrinterScreen> {
PrinterBluetoothManager printerManager = PrinterBluetoothManager();
List<PrinterBluetooth> _devices = [];
[@override](/user/override)
void initState() {
super.initState();
printerManager.scanResults.listen((devices) {
setState(() {
_devices = devices;
});
});
}
void _startScan() {
printerManager.startScan(Duration(seconds: 4));
}
void _connectToDevice(PrinterBluetooth device) async {
await printerManager.selectPrinter(device);
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Bluetooth Printer'),
),
body: Column(
children: [
ElevatedButton(
onPressed: _startScan,
child: Text('Scan for Devices'),
),
Expanded(
child: ListView.builder(
itemCount: _devices.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(_devices[index].name),
subtitle: Text(_devices[index].address),
onTap: () => _connectToDevice(_devices[index]),
);
},
),
),
],
),
);
}
[@override](/user/override)
void dispose() {
printerManager.stopScan();
super.dispose();
}
}
4. 打印内容
连接成功后,你可以使用 PrinterBluetoothManager
发送打印指令。
void _printTestReceipt() async {
final profile = await CapabilityProfile.load();
final generator = Generator(PaperSize.mm58, profile);
List<int> bytes = [];
bytes += generator.text('Test Receipt');
bytes += generator.text('----------------');
bytes += generator.text('Item 1: \$10.00');
bytes += generator.text('Item 2: \$20.00');
bytes += generator.text('Total: \$30.00');
bytes += generator.text('----------------');
bytes += generator.text('Thank you!');
bytes += generator.feed(2);
bytes += generator.cut();
printerManager.printBytes(bytes);
}
5. 完整示例
将上述代码整合到一个完整的示例中:
import 'package:flutter/material.dart';
import 'package:flutter_esc_pos_bluetooth/flutter_esc_pos_bluetooth.dart';
import 'package:flutter_esc_pos_utils/flutter_esc_pos_utils.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: PrinterScreen(),
);
}
}
class PrinterScreen extends StatefulWidget {
[@override](/user/override)
_PrinterScreenState createState() => _PrinterScreenState();
}
class _PrinterScreenState extends State<PrinterScreen> {
PrinterBluetoothManager printerManager = PrinterBluetoothManager();
List<PrinterBluetooth> _devices = [];
[@override](/user/override)
void initState() {
super.initState();
printerManager.scanResults.listen((devices) {
setState(() {
_devices = devices;
});
});
}
void _startScan() {
printerManager.startScan(Duration(seconds: 4));
}
void _connectToDevice(PrinterBluetooth device) async {
await printerManager.selectPrinter(device);
}
void _printTestReceipt() async {
final profile = await CapabilityProfile.load();
final generator = Generator(PaperSize.mm58, profile);
List<int> bytes = [];
bytes += generator.text('Test Receipt');
bytes += generator.text('----------------');
bytes += generator.text('Item 1: \$10.00');
bytes += generator.text('Item 2: \$20.00');
bytes += generator.text('Total: \$30.00');
bytes += generator.text('----------------');
bytes += generator.text('Thank you!');
bytes += generator.feed(2);
bytes += generator.cut();
printerManager.printBytes(bytes);
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Bluetooth Printer'),
),
body: Column(
children: [
ElevatedButton(
onPressed: _startScan,
child: Text('Scan for Devices'),
),
Expanded(
child: ListView.builder(
itemCount: _devices.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(_devices[index].name),
subtitle: Text(_devices[index].address),
onTap: () => _connectToDevice(_devices[index]),
);
},
),
),
ElevatedButton(
onPressed: _printTestReceipt,
child: Text('Print Test Receipt'),
),
],
),
);
}
[@override](/user/override)
void dispose() {
printerManager.stopScan();
super.dispose();
}
}