Flutter 颤振蓝牙打印到Zebra

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

我需要在zebra zq520蓝牙热敏打印机上添加打印功能。 我使用flatter_blue插件和下面的代码实现了这一点,但我对实现不满意。 我讨厌为了通过蓝牙而把字符串分成小块(等等!)。 我可能还需要一个更好的正则表达式,但这是第二个

我想知道是否有更好的方法,比如我们在java for android的旧时代使用的android.bluetooth.BluetoothAdapter类

谢谢

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设备


我没有问题发布它,如果有人感兴趣

我将代码上传到这里供大家感兴趣: