我需要在zebra zq520蓝牙热敏打印机上添加打印功能。我设法使用flutter_blue插件和下面的代码来做到这一点,但是我对实现不满意。我讨厌将字符串分解成较小的块,以便通过蓝牙(并等待!!!!)。我可能还需要一个更好的正则表达式,但这是第二!
我想知道是否有更好的方法,就像我们在过去(好?)使用android.bluetooth.BluetoothAdapter类为Android使用Java的方法一样
谢谢。
FlutterBlue flutterBlue = FlutterBlue.instance;
bool printOnZebra(String str) {
BluetoothDevice _zebra;
flutterBlue.scan(timeout: Duration(seconds: 4)).listen((scanResult) async {
BluetoothDevice dev = scanResult.device;
if (dev.name.startsWith("zebra")) {
flutterBlue.stopScan();
_zebra = dev;
await _zebra.connect();
List<String> lst = [];
RegExp exp = new RegExp(r".{" + zebraLen.toString() + "}");
Iterable<Match> matches = exp.allMatches(str);
matches.forEach((m) => lst.add(m.group(0)));
String finalPart = str.substring(lst.length * zebraLen);
lst.add(finalPart);
List<BluetoothService> services = await _zebra.discoverServices();
services.forEach((service) {
List<BluetoothCharacteristic> blueChar = service.characteristics;
blueChar.forEach((f) {
if (f.uuid
.toString()
.compareTo("38eb4a82-c570-11e3-9507-0002a5d5c51b") ==
0) {
lst.forEach((_str) {
f.write(utf8.encode(_str));
sleep(new Duration(milliseconds: zebraWait));
});
}
});
});
_zebra.disconnect();
}
});
return true;
}
对于那些想知道...安装站点上的打印机名称始终以zebra开头的原因,这就是为什么在此之后我停止发现的原因
我最终创建了自己的插件。它工作正常,但有两个限制。它假定打印机已经配对,并且仅适用于android。那是因为安装站点是一家工厂,在我的情况下不需要iOS设备
如果有兴趣的话,我可以发布它