温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - Flutter Bluetooth printing to Zebra
bluetooth flutter serial-port zebra-printers zpl

其他 - 将Flutter蓝牙打印到Zebra

发布于 2020-05-21 10:20:32

我需要在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开头的原因,这就是为什么在此之后我停止发现的原因

查看更多

提问者
John Anderton
被浏览
88
John Anderton 2019-12-22 20:33

我最终创建了自己的插件。它工作正常,但有两个限制。它假定打印机已经配对,并且仅适用于android。那是因为安装站点是一家工厂,在我的情况下不需要iOS设备

如果有兴趣的话,我可以发布它