簡體   English   中英

如何在 flutter 中使用 flutter_blue package 發送 cpcl 命令

[英]how to send cpcl commands with flutter_blue package in flutter

我嘗試使用 flutter_blue 包發送 cpcl 命令(如果我只發送字符串,這有效)到我的 zebra zq220 打印機。

起初我在這種模式下寫,如果我只輸入沒有空格的字符串,它就可以工作:

void printBluetooth() async {
 if (textController1.text == "") {
   return;
 }
List<String> lst = [];

 lst.add("hello"); 
 lst.add("world");
 lst.add("FORM");
 lst.add("PRINT");
 
 for (int i = 0; i < lst.length; ++i) {
  await  sendByte(lst[i]);
 }
 
}   



Future<void> sendByte(String scmd) async {
 print("sendBytes");
 // List<int> bytes = Uint8List.fromList(List.from(scmd.codeUnits));
  //List<int> bytes = gbk.encode(scmd);

 List<BluetoothService> services = await connectDevice!.discoverServices();
 for (BluetoothService service in services) {
   var characteristics = service.characteristics;
   for (BluetoothCharacteristic c in characteristics)  {
     c.write(uft8.encode(scmd));
   }
   
 }
}

    

但是,如果我嘗試使用這樣的 cpcl 命令(其中包含空格):

    List<String> lst = [];
  lst.add("! 0 200 200 380 1 "); //initialize
  lst.add("! 0 200 200 380 ${stampaQuantitaController.text} "); //initialize
  lst.add("SETBOLD 1"); ////
  lst.add("TEXT 7 1 100 0 HAHAHAH");
  if (descrizioneProdotto.trim().length > 32) {
    lst.add("TEXT 7 1 100 40 ${descrizioneProdotto.substring(32, 32)}");
  }
  lst.add("SETBOLD 0"); //

  if (prezzoOfferta == "") {
    //'lst.Add("SETMAG 2 2");
    lst.add("CENTER"); 
    lst.add("SETMAG 1 1"); 
    lst.add("TEXT 4 2 0 80 € ${prezzoVendita.replaceAll(".", ",")}");
    lst.add("SETMAG 0 0"); 
    lst.add("LEFT"); 
  } else {
    lst.add("SETMAG 1 1"); 
    lst.add("TEXT 4 0 110 80 ${prezzoOfferta.replaceAll(".", ",")}");
    lst.add("LINE 100 100 220 100 1");
    lst.add( "TEXT 4 0 100 125 - ${(double.parse(prezzoOfferta) - double.parse(prezzoVendita)) / double.parse(prezzoOfferta) * 100} %");
    lst.add("SETMAG 1 2"); //
    lst.add("SETBOLD 2"); //
    lst.add("SETSP 6"); //
    lst.add("TEXT 4 0 300 70 € ${prezzoVendita.replaceAll(".", ",")}");
    lst.add("SETSP 0"); //
    lst.add("SETBOLD 0"); //
    lst.add("SETMAG 0 0"); //
    lst.add("TEXT 7 0 280 155 FINE: $pezzoOffertaFine ");
  }
  lst.add("BARCODE-TEXT 7 0 5");
  lst.add("BARCODE EAN13 1 1 50 130 180 ${textController1.text}");
  lst.add("TEXT 7 0 350 180 $codArticolo");
  lst.add("TEXT 7 0 350 200 $fornitore");
  lst.add("TEXT 7 0 350 220 ${DateFormat("yyyy-MM-dd").format(DateTime.now())}");
  lst.add("FORM");
  lst.add("PRINT");


   for (int i = 0; i < lst.length; ++i) {
     await  sendByte(lst[i]);
    }




Future<void> sendByte(String scmd) async {
    print("sendBytes");
    // List<int> bytes = Uint8List.fromList(List.from(scmd.codeUnits));
     //List<int> bytes = gbk.encode(scmd);
   
    List<BluetoothService> services = await connectDevice!.discoverServices();
    for (BluetoothService service in services) {
      var characteristics = service.characteristics;
      for (BluetoothCharacteristic c in characteristics)  {
        c.write(latin1.encode(scmd));
        // or i use  c.write(gbk.encode(scmd));
       
      }
      
    }
  }







它告訴我

#0      BluetoothCharacteristic.write.<anonymous closure> (package:flutter_blue/src/bluetooth_characteristic.dart:139:15)
#1      _rootRunUnary (dart:async/zone.dart:1434:47)
#2      _CustomZone.runUnary (dart:async/zone.dart:1335:19)
<asynchronous suspension>

但我可以在斑馬 zq220 打印機的顯示屏上看到它已經從我的應用程序中收到了一些東西。

非常感謝提前,最好的問候

我終於找到了解決方案

Future<void> sendByte(String scmd) async {
print("sendBytes");
// List<int> bytes = Uint8List.fromList(List.from(scmd.codeUnits));
 //List<int> bytes = gbk.encode(scmd);

List<BluetoothService> services = await connectDevice!.discoverServices();
for (BluetoothService service in services) {
  var characteristics = service.characteristics;
  for (BluetoothCharacteristic c in characteristics)  {
    c.write(utf8.encode(scmd));
    // or i use  c.write(gbk_bytes.encode(scmd)); 
   
  }
}}

  List<String> lst = [];
 lst.add("! 0 200 200 380 1 "); //initialize
 lst.add("! 0 200 200 380 ${stampaQuantitaController.text} "); //initialize
 lst.add("SETBOLD 1"); ////
 lst.add("TEXT 7 1 100 0 HAHAHAH");
 if (descrizioneProdotto.trim().length > 32) {
   lst.add("TEXT 7 1 100 40 ${descrizioneProdotto.substring(32, 32)}");
 }
 lst.add("SETBOLD 0"); //

 if (prezzoOfferta == "") {
   //'lst.Add("SETMAG 2 2");
   lst.add("CENTER"); 
   lst.add("SETMAG 1 1"); 
   lst.add("TEXT 4 2 0 80 € ${prezzoVendita.replaceAll(".", ",")}");
   lst.add("SETMAG 0 0"); 
   lst.add("LEFT"); 
 } else {
   lst.add("SETMAG 1 1"); 
   lst.add("TEXT 4 0 110 80 ${prezzoOfferta.replaceAll(".", ",")}");
   lst.add("LINE 100 100 220 100 1");
   lst.add( "TEXT 4 0 100 125 - ${(double.parse(prezzoOfferta) - double.parse(prezzoVendita)) / double.parse(prezzoOfferta) * 100} %");
   lst.add("SETMAG 1 2"); //
   lst.add("SETBOLD 2"); //
   lst.add("SETSP 6"); //
   lst.add("TEXT 4 0 300 70 € ${prezzoVendita.replaceAll(".", ",")}");
   lst.add("SETSP 0"); //
   lst.add("SETBOLD 0"); //
   lst.add("SETMAG 0 0"); //
   lst.add("TEXT 7 0 280 155 FINE: $pezzoOffertaFine ");
 }
 lst.add("BARCODE-TEXT 7 0 5");
 lst.add("BARCODE EAN13 1 1 50 130 180 ${textController1.text}");
 lst.add("TEXT 7 0 350 180 $codArticolo");
 lst.add("TEXT 7 0 350 200 $fornitore");
 lst.add("TEXT 7 0 350 220 ${DateFormat("yyyy-MM-dd").format(DateTime.now())}");
 lst.add("FORM");
 lst.add("PRINT");

//mistake is here,at first i sended byte with loop .But now i use a string to storage list values and put them in one time all in bytes and send them
String ss="";
  for (int i = 0; i < lst.length; ++i) {
    ss+="${lst[i]}\r\n";
   }
await  sendByte(ss);


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM