Flutter 颤振蓝牙打印到Zebra
我需要在zebra zq520蓝牙热敏打印机上添加打印功能。 我使用flatter_blue插件和下面的代码实现了这一点,但我对实现不满意。 我讨厌为了通过蓝牙而把字符串分成小块(等等!)。 我可能还需要一个更好的正则表达式,但这是第二个 我想知道是否有更好的方法,比如我们在java for android的旧时代使用的android.bluetooth.BluetoothAdapter类 谢谢Flutter 颤振蓝牙打印到Zebra,flutter,bluetooth,serial-port,zebra-printers,zpl,Flutter,Bluetooth,Serial Port,Zebra Printers,Zpl,我需要在zebra zq520蓝牙热敏打印机上添加打印功能。 我使用flatter_blue插件和下面的代码实现了这一点,但我对实现不满意。 我讨厌为了通过蓝牙而把字符串分成小块(等等!)。 我可能还需要一个更好的正则表达式,但这是第二个 我想知道是否有更好的方法,比如我们在java for android的旧时代使用的android.bluetooth.BluetoothAdapter类 谢谢 FlutterBlue flutterBlue = FlutterBlue.instance; b
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;
}
flatterblue flatterblue=flatterblue.instance;
波尔·普林顿斑马(字符串str){
蓝牙装置(斑马),;
blue.scan(超时:持续时间(秒:4)).listen((scanResult)异步{
BluetoothDevice dev=scanResult.device;
if(dev.name.startsWith(“斑马”)){
blue.stopScan();
_斑马=dev;
等待斑马。连接();
列表lst=[];
RegExp exp=newregexp(r“{”+zebraLen.toString()+“}”);
Iterable matches=exp.allMatches(str);
matches.forEach((m)=>lst.add(m.group(0));
字符串finalPart=str.substring(lst.length*zebraLen);
第一次添加(最终部分);
List services=wait_zebra.discoverServices();
services.forEach((服务){
List blueChar=service.characteristics;
blueChar.forEach((f){
如果(f.uuid
.toString()
.比较(“38eb4a82-c570-11e3-9507-0002a5d5c51b”)==
0) {
一级forEach(_str){
f、 写入(utf8.encode(_str));
睡眠(新的持续时间(毫秒:zebraWait));
});
}
});
});
_斑马。断开连接();
}
});
返回true;
}
对于那些想知道。。。安装站点上的打印机名称总是以zebra开头,这就是为什么我在创建自己的插件之后停止了discovery。 它工作正常,但有两个局限性。它假设打印机已配对,并且仅适用于android。这是因为安装站点是一个工厂,在我的案例中不需要iOS设备
我没有问题发布它,如果有人感兴趣我将代码上传到这里供大家感兴趣: