From 7764ef51a57732360dea8c786c1df800f96e1062 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=AB=A0=E6=96=87=E8=BD=A9?= <12812285557@qq.com> Date: Tue, 23 Aug 2022 15:27:36 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=82=E9=85=8D=E6=96=B0=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/libraries/Dart_SDK.xml | 30 +- .idea/libraries/Flutter_Plugins.xml | 3 +- .idea/runConfigurations.xml | 10 + android/.idea/.gitignore | 3 + android/.idea/.name | 1 + android/.idea/compiler.xml | 6 + android/.idea/gradle.xml | 19 + android/.idea/jarRepositories.xml | 25 ++ android/.idea/misc.xml | 9 + android/.idea/modules.xml | 8 + android/.idea/runConfigurations.xml | 10 + android/.idea/vcs.xml | 6 + android/build.gradle | 6 +- ...{CPCL_SDK_V1.11.jar => CPCL_SDK_V1.12.jar} | Bin 66051 -> 66095 bytes android/src/main/AndroidManifest.xml | 16 +- .../com/hy/print/hy_printer/Bluetooth.java | 349 ++++++++++++++++++ .../hy/print/hy_printer/HyPrinterPlugin.java | 110 ++++-- .../com/hy/print/hy_printer/PrintAsOrder.java | 227 +++++++++++- example/android/app/build.gradle | 7 +- example/android/app/libs/CPCL_SDK_V1.12.jar | Bin 0 -> 66095 bytes example/android/app/libs/arm64-v8a/libLZO.so | Bin 0 -> 14000 bytes .../android/app/libs/armeabi-v7a/libLZO.so | Bin 0 -> 17824 bytes example/android/app/libs/armeabi/libLZO.so | Bin 0 -> 17820 bytes example/android/app/libs/mips/libLZO.so | Bin 0 -> 71856 bytes example/android/app/libs/mips64/libLZO.so | Bin 0 -> 15200 bytes example/android/app/libs/x86/libLZO.so | Bin 0 -> 13668 bytes example/android/app/libs/x86_64/libLZO.so | Bin 0 -> 18368 bytes .../android/app/src/debug/AndroidManifest.xml | 6 + .../android/app/src/main/AndroidManifest.xml | 17 +- .../app/src/profile/AndroidManifest.xml | 6 + example/lib/main.dart | 241 ++++++++---- example/lib/scan_page.dart | 103 +++--- example/pubspec.lock | 91 +++-- example/pubspec.yaml | 2 +- hy_printer.iml | 1 + lib/device.dart | 8 +- lib/dj_printer.dart | 199 ++++++++++ lib/hy_printer.dart | 296 ++++++++------- lib/status_enum.dart | 13 + pubspec.lock | 89 ++++- pubspec.yaml | 4 +- 41 files changed, 1538 insertions(+), 383 deletions(-) create mode 100644 .idea/runConfigurations.xml create mode 100644 android/.idea/.gitignore create mode 100644 android/.idea/.name create mode 100644 android/.idea/compiler.xml create mode 100644 android/.idea/gradle.xml create mode 100644 android/.idea/jarRepositories.xml create mode 100644 android/.idea/misc.xml create mode 100644 android/.idea/modules.xml create mode 100644 android/.idea/runConfigurations.xml create mode 100644 android/.idea/vcs.xml rename android/libs/{CPCL_SDK_V1.11.jar => CPCL_SDK_V1.12.jar} (72%) create mode 100644 android/src/main/java/com/hy/print/hy_printer/Bluetooth.java create mode 100644 example/android/app/libs/CPCL_SDK_V1.12.jar create mode 100644 example/android/app/libs/arm64-v8a/libLZO.so create mode 100644 example/android/app/libs/armeabi-v7a/libLZO.so create mode 100644 example/android/app/libs/armeabi/libLZO.so create mode 100644 example/android/app/libs/mips/libLZO.so create mode 100644 example/android/app/libs/mips64/libLZO.so create mode 100644 example/android/app/libs/x86/libLZO.so create mode 100644 example/android/app/libs/x86_64/libLZO.so create mode 100644 lib/dj_printer.dart create mode 100644 lib/status_enum.dart diff --git a/.idea/libraries/Dart_SDK.xml b/.idea/libraries/Dart_SDK.xml index 82934cc..bf2e4a6 100644 --- a/.idea/libraries/Dart_SDK.xml +++ b/.idea/libraries/Dart_SDK.xml @@ -1,17 +1,25 @@ - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/.idea/libraries/Flutter_Plugins.xml b/.idea/libraries/Flutter_Plugins.xml index d281870..c3a4d75 100644 --- a/.idea/libraries/Flutter_Plugins.xml +++ b/.idea/libraries/Flutter_Plugins.xml @@ -1,8 +1,9 @@ + + - diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..797acea --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/android/.idea/.gitignore b/android/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/android/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/android/.idea/.name b/android/.idea/.name new file mode 100644 index 0000000..d382d5f --- /dev/null +++ b/android/.idea/.name @@ -0,0 +1 @@ +hy_printer \ No newline at end of file diff --git a/android/.idea/compiler.xml b/android/.idea/compiler.xml new file mode 100644 index 0000000..fb7f4a8 --- /dev/null +++ b/android/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/android/.idea/gradle.xml b/android/.idea/gradle.xml new file mode 100644 index 0000000..15345bf --- /dev/null +++ b/android/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/android/.idea/jarRepositories.xml b/android/.idea/jarRepositories.xml new file mode 100644 index 0000000..d2ce72d --- /dev/null +++ b/android/.idea/jarRepositories.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/.idea/misc.xml b/android/.idea/misc.xml new file mode 100644 index 0000000..6199cc2 --- /dev/null +++ b/android/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/android/.idea/modules.xml b/android/.idea/modules.xml new file mode 100644 index 0000000..0305d62 --- /dev/null +++ b/android/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/android/.idea/runConfigurations.xml b/android/.idea/runConfigurations.xml new file mode 100644 index 0000000..797acea --- /dev/null +++ b/android/.idea/runConfigurations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/android/.idea/vcs.xml b/android/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/android/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/android/build.gradle b/android/build.gradle index c0e3ead..8f09bef 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -31,7 +31,7 @@ android { } defaultConfig { - minSdkVersion 19 + minSdkVersion 16 } sourceSets { main { @@ -42,8 +42,8 @@ android { dependencies{ implementation fileTree(dir: "libs", include: ["*.jar"]) - implementation files('libs/CPCL_SDK_V1.11.jar') - + implementation files('libs/CPCL_SDK_V1.12.jar') + implementation 'androidx.annotation:annotation:1.3.0' } diff --git a/android/libs/CPCL_SDK_V1.11.jar b/android/libs/CPCL_SDK_V1.12.jar similarity index 72% rename from android/libs/CPCL_SDK_V1.11.jar rename to android/libs/CPCL_SDK_V1.12.jar index 52365e66eb200df11aed81afe26baf2380b3c521..83c8e5bc7b3be6807ebe08414e45ad9ff4f38796 100644 GIT binary patch delta 16895 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 M85P--e}a?(0J)Nf?EnA( delta 16844 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 diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index 79cbb3a..eb20f34 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -1,7 +1,15 @@ - + - + + + - + + + + + + + diff --git a/android/src/main/java/com/hy/print/hy_printer/Bluetooth.java b/android/src/main/java/com/hy/print/hy_printer/Bluetooth.java new file mode 100644 index 0000000..4d0f498 --- /dev/null +++ b/android/src/main/java/com/hy/print/hy_printer/Bluetooth.java @@ -0,0 +1,349 @@ +package com.hy.print.hy_printer; + +import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothDevice; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.AsyncTask; + +import java.io.IOException; + +import cpcl.PrinterHelper; +import io.flutter.plugin.common.EventChannel; + +//import com.sewoo.port.android.BluetoothPort; +//import com.sewoo.request.android.RequestHandler; + + +public class Bluetooth { + private BluetoothAdapter mBluetoothAdapter; + //private BluetoothPort bluetoothPort; + + private BroadcastReceiver connectDevice; + private BroadcastReceiver discoveryResult; + private BroadcastReceiver searchFinish; + private BroadcastReceiver searchStart; + + private Thread btThread; + + private boolean searchflags; + private boolean disconnectflags; + + public void init() { + +// bluetoothPort = BluetoothPort.getInstance(); +// bluetoothPort.SetMacFilter(false); + bluetoothSetup(); + searchflags = false; + disconnectflags = false; + System.out.println("打印机蓝牙初始化完成"); + } + + //初始化连接监听 + public void createConnectBroadcast(Context context, EventChannel.EventSink eventSink) { + + connectDevice = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) { + eventSink.success("connected"); + } else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action)) { + try { + PrinterHelper.portClose(); +// if (bluetoothPort.isConnected()) { +// System.out.println("1111s"); +// bluetoothPort.disconnect(); +// } + if ((btThread != null) && (btThread.isAlive())) { + cancelThread(); + } + System.out.println("disconnected"); + eventSink.success("disconnected"); + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + }; + + context.registerReceiver(connectDevice, new IntentFilter(BluetoothDevice.ACTION_ACL_CONNECTED)); + context.registerReceiver(connectDevice, new IntentFilter(BluetoothDevice.ACTION_ACL_DISCONNECTED)); + System.out.println("注册连接广播"); + } + + public boolean isValidAddress(String address) { + String[] btDevAddr = new String[]{"00:12:6f", "00:13:7b", "00:07:80", "88:6b:0f", "40:19:20", "00:01:90", "ec:1b:bd", "58:8e:81", "14:b4:57", "90:fd:9f", "00:0b:57", "68:0a:e2", "84:2e:14", "08:6b:d7", "60:a4:23", "cc:cc:cc", "bc:33:ac", "74:f0:7d", "84:fd:27", "84:71:27", "80:4b:50", "5c:02:72", "cc:86:ec", "2c:11:65", "b4:e3:f9", "0c:43:14", "50:32:5f", "04:cd:15", "8c:f6:81", "90:35:ea"}; + if (!BluetoothAdapter.checkBluetoothAddress(address)) { + return false; + } else { + for(int i = 0; i < btDevAddr.length; ++i) { + if (btDevAddr[i].equalsIgnoreCase(address.substring(0, 8))) { + return true; + } + } + + return false; + } + } + + //初始化搜索设备监听 + public void createDiscoveryBroadcast(Context context, EventChannel.EventSink eventSink) { + discoveryResult = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String key = ""; + BluetoothDevice remoteDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); + String name = remoteDevice.getName(); + System.out.println(name); + System.out.println(remoteDevice.getAddress()); + if (remoteDevice != null && name != null) { + if (remoteDevice.getBondState() != BluetoothDevice.BOND_BONDED) { + key = "{" + "\"name\":" + "\"" + name + "\"" + "," + + "\"address\":" + "\"" + remoteDevice.getAddress() + "\"" + "," + + "\"isPaired\":" + false + + "}"; + + } else { + + key = "{" + "\"name\":" + "\"" + name + "\"" + "," + + "\"address\":" + "\"" + remoteDevice.getAddress() + "\"" + "," + + "\"isPaired\":" + true + + "}"; + } + System.out.println(key); + eventSink.success(key); + System.out.println(key); +// if (isValidAddress(remoteDevice.getAddress())) { +// eventSink.success(key); +// System.out.println(key); +// } + } + + } + }; + context.registerReceiver(discoveryResult, new IntentFilter(BluetoothDevice.ACTION_FOUND)); + searchStart = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + eventSink.success("start"); + System.out.println("start"); + } + }; + context.registerReceiver(searchStart, new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_STARTED)); + + searchFinish = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + eventSink.success("finish"); + searchflags = true; + System.out.println("finish"); + } + }; + context.registerReceiver(searchFinish, new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED)); + System.out.println("注册搜索广播"); + } + + //蓝牙设置 + private void bluetoothSetup() { + + mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); + if (mBluetoothAdapter == null) { + System.out.println("不支持蓝牙"); + } + } + + + //搜索设备 + public void SearchingBTDevice() { + new CheckTypesTask().execute(); + System.out.println("开始搜索"); + + } + + + public int btConn(final String address, Context context) throws Exception { +// bluetoothPort.connect(address); + final int[] portOpen = {-4}; + btThread = new Thread(new Runnable() { + + @Override + public void run() { + // TODO Auto-generated method stub + try { + System.out.println(address); + portOpen[0] = PrinterHelper.portOpenBT(context,address); + PrinterHelper.logcat("portOpen:"+ portOpen[0]); + System.out.println(portOpen[0]); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + }); + btThread.start(); + //final int result = PrinterHelper.portOpenBT(context,address); + //new connBT().execute(address); + + return portOpen[0]; + } + + //断开连接 + public void DisconnectDevice(Context context) { + try { + // bluetoothPort.disconnect(); + PrinterHelper.portClose(); + if ((btThread != null) && (btThread.isAlive())) + btThread.interrupt(); + + disconnectflags = true; + context.unregisterReceiver(connectDevice); + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + //取消搜索 + public void cancelDiscoveryResult(Context context) { + System.out.println("取消搜索"); + mBluetoothAdapter.cancelDiscovery(); + context.unregisterReceiver(discoveryResult); + context.unregisterReceiver(searchStart); + context.unregisterReceiver(searchFinish); + } + + + public void cancelThread() { + btThread.interrupt(); + btThread = null; + } + + private class CheckTypesTask extends AsyncTask { + + @Override + protected void onPreExecute() { + mBluetoothAdapter.startDiscovery(); + super.onPreExecute(); + } + + ; + + @Override + protected Void doInBackground(Void... params) { + // TODO Auto-generated method stub + try { + while (true) { + if (searchflags) + break; + + Thread.sleep(100); + } + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + @Override + protected void onPostExecute(Void result) { + + searchflags = false; + super.onPostExecute(result); + } + + ; + } + + + + class connBT extends AsyncTask { + + + @Override + protected Integer doInBackground(String... strings) { + Integer retVal = null; + + //bluetoothPort.connect(strings[0]); + + retVal = Integer.valueOf(0); + + return retVal; + } + + @Override + protected void onPreExecute() { + + super.onPreExecute(); + } + + @Override + protected void onPostExecute(Integer result) { + if (result.intValue() == 0) // Connection success. + { +// RequestHandler rh = new RequestHandler(); +// btThread = new Thread(rh); +// btThread.start(); + } else // Connection failed. + { + + } + super.onPostExecute(result); + } + } + + public void ExcuteDisconnect(Context context) { + new ExcuteDisconnectBT().execute(context); + } + + private class ExcuteDisconnectBT extends AsyncTask { + + + @Override + protected Void doInBackground(Context... contexts) { + try { + DisconnectDevice(contexts[0]); + + while (true) { + if (disconnectflags) + break; + + Thread.sleep(100); + } + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + @Override + protected void onPreExecute() { + super.onPreExecute(); + } + + ; + + + @Override + protected void onPostExecute(Void result) { + disconnectflags = false; + super.onPostExecute(result); + } + + ; + } + +} diff --git a/android/src/main/java/com/hy/print/hy_printer/HyPrinterPlugin.java b/android/src/main/java/com/hy/print/hy_printer/HyPrinterPlugin.java index bb9a330..b8a72f1 100644 --- a/android/src/main/java/com/hy/print/hy_printer/HyPrinterPlugin.java +++ b/android/src/main/java/com/hy/print/hy_printer/HyPrinterPlugin.java @@ -4,8 +4,8 @@ import android.content.Context; import androidx.annotation.NonNull; -import cpcl.PrinterHelper; import io.flutter.embedding.engine.plugins.FlutterPlugin; +import io.flutter.plugin.common.EventChannel; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.MethodChannel.MethodCallHandler; @@ -15,62 +15,100 @@ import io.flutter.plugin.common.MethodChannel.Result; * HyPrinterPlugin */ public class HyPrinterPlugin implements FlutterPlugin, MethodCallHandler { - /// The MethodChannel that will the communication between Flutter and native Android - /// - /// This local reference serves to register the plugin with the Flutter Engine and unregister it - /// when the Flutter Engine is detached from the Activity + +// private MethodChannel channel; +// private Context context; + private MethodChannel channel; + private EventChannel discoveryChannel; + private EventChannel connectChannel; private Context context; + private static final String DISCOVERYDEVICE = "com.discovery.devices"; + private static final String CONNECT = "com.connect"; + PrintAsOrder printAsOrder; + Bluetooth bluetooth = new Bluetooth(); @Override public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) { channel = new MethodChannel(flutterPluginBinding.getBinaryMessenger(), "hy_printer"); channel.setMethodCallHandler(this); context = flutterPluginBinding.getApplicationContext(); + discoveryChannel = new EventChannel(flutterPluginBinding.getBinaryMessenger(), DISCOVERYDEVICE); + + connectChannel = new EventChannel(flutterPluginBinding.getBinaryMessenger(), CONNECT); + discoveryChannel.setStreamHandler(new EventChannel.StreamHandler() { + @Override + public void onListen(Object arguments, EventChannel.EventSink events) { + bluetooth.createDiscoveryBroadcast(context, events); + } + + @Override + public void onCancel(Object arguments) { + bluetooth.cancelDiscoveryResult(context); + } + }); + connectChannel.setStreamHandler(new EventChannel.StreamHandler() { + @Override + public void onListen(Object arguments, EventChannel.EventSink events) { + bluetooth.createConnectBroadcast(context, events); + } + + @Override + public void onCancel(Object arguments) { + bluetooth.ExcuteDisconnect(context); + } + }); } @Override - public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { - if (call.method.equals("connect")) { + public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { + if (call.method.equals("startSearch")) { + bluetooth.SearchingBTDevice(); + } else if (call.method.equals("connect")) { int code = -4; + String arg = call.argument("address"); + System.out.println(arg); try { - code = PrinterHelper.portOpenBT(context, (String) call.argument("address")); + code = bluetooth.btConn(arg,context); + System.out.println(code); + //PrinterHelper.portOpenBT(context,"04:7F:0E:95:FD:A1"); + result.success(code); } catch (Exception e) { e.printStackTrace(); } - result.success(code); - } else if (call.method.equals("disConnect")) { - boolean status = false; - try { - status = PrinterHelper.portClose(); - } catch (Exception e) { - e.printStackTrace(); - } - result.success(status); + } else if (call.method.equals("init")) { + System.out.println("打印机初始化"); + bluetooth.init(); + printAsOrder = new PrintAsOrder(); + + result.success(true); + } else if (call.method.equals("newPrint")) { + System.out.println("newPrint"); + String code = call.argument("code"); + String barCode = call.argument("barCode"); + String channel = call.argument("channel"); + String country = call.argument("country"); + String num = call.argument("num"); + String sum = call.argument("sum"); + int offset = call.argument("offset"); + boolean hasPlan = call.argument("hasPlan"); + + printAsOrder.printAsCodeNew(code, barCode, channel, country, num, sum, offset, hasPlan); + result.success(true); } else if (call.method.equals("getStatus")) { - int status = -1; - try { - status = PrinterHelper.getstatus(); - } catch (Exception e) { - e.printStackTrace(); - } - result.success(status); - } else if (call.method.equals("printAsOrder")) { - int re = PrintAsOrder.print(call.argument("code"), call.argument("fbaCode"), call.argument("country"), call.argument("channel"), call.argument("count"), call.argument("hasPlan")); - result.success(re); - } else if (call.method.equals("printBarCode")) { - int re = -1; + int sta = 0; try { - PrinterHelper.printAreaSize("0", "200", "200", "500", "1"); - re = PrinterHelper.Barcode(PrinterHelper.BARCODE, PrinterHelper.code128, call.argument("width"), call.argument("ratio"), call.argument("height"), call.argument("x"), call.argument("y"), call.argument("undertext"), "7", call.argument("size"), call.argument("offset"), call.argument("data")); - PrinterHelper.Form(); - PrinterHelper.Print(); + sta = printAsOrder.getStatus(); } catch (Exception e) { e.printStackTrace(); } - result.success(re); - } else { - result.notImplemented(); + result.success(sta); + } else if (call.method.equals("disposeDiscovery")) { + bluetooth.cancelDiscoveryResult(context); + result.success(true); + } else if (call.method.equals("disposeConnect")) { + bluetooth.ExcuteDisconnect(context); + result.success(true); } } diff --git a/android/src/main/java/com/hy/print/hy_printer/PrintAsOrder.java b/android/src/main/java/com/hy/print/hy_printer/PrintAsOrder.java index 67afe1b..a34f401 100644 --- a/android/src/main/java/com/hy/print/hy_printer/PrintAsOrder.java +++ b/android/src/main/java/com/hy/print/hy_printer/PrintAsOrder.java @@ -3,6 +3,7 @@ package com.hy.print.hy_printer; import cpcl.PrinterHelper; public class PrintAsOrder { + private static void setBold() { try { PrinterHelper.SetBold("2"); @@ -19,18 +20,7 @@ public class PrintAsOrder { } } - private static void printBarCode(String code) { - String width = "2"; - if (code.length() > 18) { - width = "1"; - } - try { - PrinterHelper.Barcode(PrinterHelper.BARCODE, PrinterHelper.code128, width, "1", "130", "10", "26", false, "", "", "", code); - } catch (Exception e) { - e.printStackTrace(); - } - } public static int print(String code, String fbaCode, String country, String channel, String count, Boolean hasPlan) { int re = 0; @@ -49,7 +39,7 @@ public class PrintAsOrder { try { PrinterHelper.printAreaSize("0", "200", "200", "400", "1"); PrinterHelper.Align(PrinterHelper.CENTER); - printBarCode(code); +// printBarCode(code); PrinterHelper.Align(PrinterHelper.LEFT); PrinterHelper.SetBold("3"); PrinterHelper.AutCenter(PrinterHelper.TEXT, "45", "170", 500, 4, code); @@ -83,7 +73,7 @@ public class PrintAsOrder { try { PrinterHelper.printAreaSize("0", "200", "200", "400", "1"); PrinterHelper.Align(PrinterHelper.CENTER); - printBarCode(code); +// printBarCode(code); PrinterHelper.Align(PrinterHelper.LEFT); PrinterHelper.SetBold("3"); PrinterHelper.AutCenter(PrinterHelper.TEXT, "45", "170", 500, 4, code); @@ -116,4 +106,215 @@ public class PrintAsOrder { System.out.println("print finish"); return reusult; } + + + public void printAsCodeNew(String code, String barCode, String channel, String country, String num, String sum, + int offset, boolean hasPlan) { + + if (hasPlan) { + PrintPlanNew(code, barCode, channel, country, num, sum, offset); + } else { + PrintNoPlanNew(code, barCode, num, sum, offset); + } + } + + private void PrintPlanNew(String code, String barCode, String channel, String country, String num, String sum, + int offset) { + System.out.println("print start"); + int cx = 0,cy = 0; + int cx1 = 0,cy1 = 0; + String country1 = ""; + String cMultiple = "3"; + String cSize = "55"; + String channel1 = ""; + if(country.length()>5){ + cMultiple = "3"; + cx = 65;cy = 220; + country1 = country.substring(4); + cx1 = (165-country1.length()*25); + cy1 = 280; + + country = country.substring(0,4); + + }else if(country.length()==5){ + cMultiple = "3";cx = 45;cy = 250; + cSize = "55"; + }else if(country.length()==4){ + cMultiple = "4";cx = 40;cy = 245; + cSize = "55"; + } + else { + cMultiple = "3";cy = 245;cx = 175-country.length()*40; + cSize = "60"; + } + int channelY = 460; + int channel1Y = 460; + if(channel.length()>11){ + channelY = 440; + channel1Y = 490; + channel1 = channel.substring(11); + channel = channel.substring(0,11); + }else{ + channelY = 460; + } + + System.out.println("cx1"); + System.out.println(cx1); + + System.out.println("country1"); + System.out.println(country1); + + try { + PrinterHelper.printAreaSize("0", "200", "200", "800", "1"); + PrinterHelper.Box("0","10","575","790","3"); + + + PrinterHelper.Line("0", "160", "575", "160", "3"); + PrinterHelper.Line("0", "400", "575", "400", "3"); + PrinterHelper.Line("0", "560", "575", "560", "3"); + PrinterHelper.Line("380", "360", "540", "200", "3"); + PrinterHelper.Line("333", "160", "333", "400", "3"); + + PrinterHelper.SetBold("3"); + PrinterHelper.SetMag("5","5"); + PrinterHelper.Align(PrinterHelper.CENTER); + PrinterHelper.Text(PrinterHelper.TEXT, "1", "0", "0", "55", code); + + +// PrinterHelper.Text(PrinterHelper.TEXT, "50", "0", "100", "0", code); +// PrinterHelper.Text(PrinterHelper.TEXT, "24", "0", "200", "0", code); + + + + closeBold(); + PrinterHelper.SetMag("1","1"); + + + + PrinterHelper.Align(PrinterHelper.LEFT); + PrinterHelper.SetBold("3"); + PrinterHelper.SetMag(cMultiple,cMultiple); + PrinterHelper.Text(PrinterHelper.TEXT,cSize , "0",String.valueOf(cx), String.valueOf(cy), country); + PrinterHelper.Align(PrinterHelper.LEFT); + if(!country1.isEmpty()){ + PrinterHelper.Text(PrinterHelper.TEXT,cSize , "0",String.valueOf(cx1), String.valueOf(cy1), country1); + } + + closeBold(); + PrinterHelper.SetMag("1","1"); + + PrinterHelper.SetBold("2"); + PrinterHelper.SetMag("2.5","2.5"); + PrinterHelper.Text(PrinterHelper.TEXT, "50", "0", "390", "210", num); + + PrinterHelper.Text(PrinterHelper.TEXT, "50", "0", String.valueOf(500-sum.length()*10), String.valueOf(315), sum); + closeBold(); + PrinterHelper.SetMag("1","1"); + + PrinterHelper.Align(PrinterHelper.CENTER); + printBarCode(barCode,"0","590"); + + + +// PrinterHelper.SetBold("2"); + PrinterHelper.SetMag("2","2"); + PrinterHelper.Text(PrinterHelper.TEXT,"3" , "0","0", String.valueOf(channelY), channel); + + if(!channel1.isEmpty()){ + PrinterHelper.Text(PrinterHelper.TEXT,"3" , "0","0", String.valueOf(channel1Y), channel1); + } + closeBold(); + PrinterHelper.SetMag("1","1"); + + PrinterHelper.Form(); + PrinterHelper.Print(); + } catch (Exception e) { + e.printStackTrace(); + + } + System.out.println("print finish"); + + + } + + + private static void printBarCode(String code,String x,String y) { + + String width = "1.5"; + if (code.length() > 18) { + width = "1"; + } + try { + PrinterHelper.Barcode(PrinterHelper.BARCODE, PrinterHelper.code128, width, "0", "130", x, y, true, "15", "15", "15", code); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void PrintNoPlanNew(String code, String barCode, String num, String sum, + int offset) { + + System.out.println("print start"); + + try { + PrinterHelper.printAreaSize("0", "200", "200", "800", "1"); + PrinterHelper.Box("0","10","575","790","3"); + + + PrinterHelper.Line("0", "160", "575", "160", "3"); + PrinterHelper.Line("0", "400", "575", "400", "3"); + + PrinterHelper.Line("380", "360", "540", "200", "3"); + PrinterHelper.Line("333", "160", "333", "400", "3"); + + PrinterHelper.SetBold("3"); + PrinterHelper.SetMag("5","5"); + PrinterHelper.Align(PrinterHelper.CENTER); + PrinterHelper.Text(PrinterHelper.TEXT, "1", "0", "0", "55", code); + + +// PrinterHelper.Text(PrinterHelper.TEXT, "50", "0", "100", "0", code); +// PrinterHelper.Text(PrinterHelper.TEXT, "24", "0", "200", "0", code); + + + + closeBold(); + PrinterHelper.SetMag("1","1"); + + + + PrinterHelper.Align(PrinterHelper.LEFT); + PrinterHelper.SetBold("3"); + + PrinterHelper.SetMag("4","4"); + PrinterHelper.Text(PrinterHelper.TEXT,"55" , "0","40","245", "未建计划"); + + closeBold(); + PrinterHelper.SetMag("1","1"); + + PrinterHelper.SetBold("2"); + PrinterHelper.SetMag("2.5","2.5"); + PrinterHelper.Text(PrinterHelper.TEXT, "50", "0", "390", "210", num); + + PrinterHelper.Text(PrinterHelper.TEXT, "50", "0", String.valueOf(500-sum.length()*10), String.valueOf(315), sum); + closeBold(); + PrinterHelper.SetMag("1","1"); + + PrinterHelper.Align(PrinterHelper.CENTER); + printBarCode(barCode,"0","520"); + + + + PrinterHelper.Form(); + PrinterHelper.Print(); + } catch (Exception e) { + e.printStackTrace(); + + } + System.out.println("print finish"); + } + + public int getStatus() throws Exception { + return PrinterHelper.getstatus(); + } } diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index 4862fcd..615abf9 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -25,7 +25,7 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 30 + compileSdkVersion 33 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 @@ -54,3 +54,8 @@ android { flutter { source '../..' } +dependencies{ + implementation fileTree(dir: "libs", include: ["*.jar"]) + implementation files('libs/CPCL_SDK_V1.12.jar') + +} \ No newline at end of file diff --git a/example/android/app/libs/CPCL_SDK_V1.12.jar b/example/android/app/libs/CPCL_SDK_V1.12.jar new file mode 100644 index 0000000000000000000000000000000000000000..83c8e5bc7b3be6807ebe08414e45ad9ff4f38796 GIT binary patch literal 66095 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 bzxFF+CBT7m*w1$r5y%~IMkIdxdG`MRPr-p< literal 0 HcmV?d00001 diff --git a/example/android/app/libs/arm64-v8a/libLZO.so b/example/android/app/libs/arm64-v8a/libLZO.so new file mode 100644 index 0000000000000000000000000000000000000000..a8b7a724babf07fc925ba3c75f242669e427b862 GIT binary patch literal 14000 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 literal 0 HcmV?d00001 diff --git a/example/android/app/libs/armeabi-v7a/libLZO.so b/example/android/app/libs/armeabi-v7a/libLZO.so new file mode 100644 index 0000000000000000000000000000000000000000..ffd0aeb49a3b85a7f13eeec11069b55e84fdc208 GIT binary patch literal 17824 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 D*MyhT literal 0 HcmV?d00001 diff --git a/example/android/app/libs/mips/libLZO.so b/example/android/app/libs/mips/libLZO.so new file mode 100644 index 0000000000000000000000000000000000000000..02c383836ec769fea01c5e3d0436b7b62c21df4f GIT binary patch literal 71856 zcmeHNeQ;dWbw6)+B|Xc=tc@JjVBkINd-BR!D=Q-sC3R+2vJ5gciAW$34e4sFT}z8) zNs(k~Cy3yr{ioBJ^Wf~c_nvdlz4v#|IrqLN-@Sh0wThyU_xMRAt`$|HX7Cd=3RMNE zvzauirU)&k5c!FQwnNFI5cHS=AavtrC=a2f<6klH#g>M zF%}c|2m6x`>o||buscikn!tyM9xSOkMF7eDYCyoAuKV!K^zaSKb|p{MH?Q3CgIBk% zdLjMmr~ zMIa5d8079bEkXG*(3K!>os8F?`&2>E*<+%GC@(1KSckGvQs*M$5iV<6jyn6t<)G>^ zS!osScEN{ZfFD0Bod%!9q!^Q>sQ&;P-5qpxJ4nB@zJj8sAB21#^g5x>CRo1#@*qHa z9h~d;p?xO+3%T|8gXc@^qv`|@*d?$ZK*Mo>+l@`){@+Hubo@`Eek(Sk1^O&skNO#G ze$=fWL7nF2yOjPD)iWjIy-;Sa7xld*_FgTMzk>cJO8O5&K3THfUqU`zBEJ*$F4VpG z@qTL9;3zhW=lfil{eLg3f48jOiMmlTzhzv95}?CqwYQI=Pxl~{AqXokE1?OqQ3$5@+I{QvVIVF0B z5~<9{5G4{l+mngSnSo?~=FYTRO^&9wXGZDzD!XnoXqr}*U-ByIh-QfK+oX7=1ect(mh+8mfO?A zBbmX0L<);Jzhz_;Q|oo7mP*e}&6(@DhQvs6bDGr>$y9%O`06!wxo2?bj^RvipS`xk z*7Vk%twXkei$iyK#jS(4JAKhSl6I8cDN%oB6A)?~8RSxr%eT6GWHi;&(BM{5{ai?F z#(s=~VJ(0;?Xbiq><7>pW(mp=3;+$g8Kp!5Wrt%F>>FF!xS?$wTmcWCd*}Wuub-2g zU-BW_@qe846uZQ~PVe3DK`;OIT*MjOM`zGh`kcV|1(&pQgUw5Y{}0MOTCq0%xkpy& zvtRVzn*Cx`uV7qp9 zSDP_yeQo7N`q!xrdVZ>%o}G%*GgE8n$W#j*o@%D2r(*QfRFs~aiqQ0wp1p-MdTh$v zUBsF7|iE=7lP-SkXu!5PhOMl@_!@_|{%Os(6;b#BK=Xqfr< zTtAjM`bFOg+CO!EpW?YbyXWhZ^@ZF%Z_bUAJ=f>xe0_?TL+QMVes5ku*y_qIf56n@ zK8=p#%*ce#jA=fzW!9PFEcwjSj?K9L1ABsufxR}K`(yUHd3|huqb+~dmGeB$mlNdN z*Puf=GZuH}TxDok<$?7^lg)!hozaf@_$gp8erC(W+&oyXwoGp0h`F-tee=qSelu9~ zV=r^q(;W6Thds_=uXEV*9QHm3AIQNMa_|ZG+^oNozGh!3xNHWqh_phqf;3!Fe1>Hm zFbp+Ke$wo4^n5U^R*)V{k)gK2KWF{npn-nAwL?4G3|)l}W%WJWexp%qFrUzT2Fp9k zW$m86TGr0`r{U*|;L9rZEC62~qzQY@zV-lRs2H@Yzl;6C@y-%8d!ZX+7{DP{vtY>UqoNU)#|x?HBILi(35$Up2}CzA&d?ENCj-0;7?&}=1;nO z+U3u={HrcM>hdXvcRY?U>**z{xCC*agkvw^?pv%eBXI@S9UD8dbAq^Tb`{B9bBC_* z`Yg=-ZL1qsmqUggxmHI1U(_9K#_QPc8ss&7 z_7=Jc`Ok@QzFRwf9ddPlICf4q$T<%BYh8Uanq`wkU1?;;Zf_=9 zmuFicI&y&R;f-Jq*Dt5Sfe;yJHZ+z?W%h8XhJzp1D=2Pg}{AF|) z_3I$($kUoi?Cqhb5lQ<@?Ks{`oH>W+`2$zbvj;3|XN)fMlc^@jvh+`g#f=ulo?DRzasQWMmHCMv_jvO%5FqxrUM71h(J_j2+W7)B)<~o!W+8L$B z3gj&VI%&JVWAnQFJ){~dX!5|=4z>9*ntY7y&}CK7OMy1q`gNggb{|6vBfeXAW4-(8 z)c2vSHfn@+AZWVnxG~fnX!9A1sFq*#I5*;oj~pM$k``G%6ri--9uNBH_g1{dvQkDJ z@+=}Ex)e4nQmTc-=K;=QpsU(7mv;3wHFV zWz`z+4csT#HxA^&SkFavUdJ~F_&fXv=fYDs7oNtsa2V&p5u6LpXz^JgCmP{GE-vJ~U}RIuk7zO;P^1@Hz{_ca7{-*SrE>$}wDE!pqmE;Ngji`dOpHrw}$ z*&^Z+_n=4?ccX6Hd!}<{3+nL+Z+;esz_wm>`53pwDK01!OOKWts9W&|uXJF?H{Md*U5a$J~X9jm4-3Z5P z!M|yk9dR-{v%n;oM_wo>;0m}8+y@R@rb=62qu%sWf8I|U(H31Dpso1;-B73iuK=$E zuLQ569-Q^-3TCKVdBe&sF*`L1N4^BVz}WE!V!sewh&Ai6&k_4f4NcUTa8!Kfu`xAc zSPL*>z290|jT!Ie{Te5lnZTRaxB`wC9ruC113VCCW`Mo}9F*}Y+@1Vrch-{JZ$XZH zU-z~(0StQ#ecuk?)4g8-EkSHRZ@-_Cbz!v;KD;0P+4=!~JxO*4e(_iab?k=+pPoo7S!HhcQiJzppnH z;(JjX_afEAcbuTUuNS^~s>C<9)Zx<+eDe+0H^G(G)w^LIee29__PuV!NB5gVx9zvb z=>0L2$n(JcIy z_cR-;zkd#KRnx~nn2W049{;)Q6n+ou-&FG1PygJj)VdKG*7&1Q}je2+!k z@Hh5T(f6=^@sM$rP8rA6R3I+c_6!`dt{L%A2Osp|o2;!*)U*E;>ou(ZRJ05Icx)eh zjOd#aS-fBHe0J1V@b_O^cC4E1>9HW`%`E$^^(y+#L_6)ieQw{%LTO*NN%ZxJ2K7fi z$99czBjTCg_wZfM-QOys5@)~Od4kW_alLC2ynnob#+ET&@MU1%KVI+F5z~mB{_&M= z9kGoV>L16sWb5NzFpl^hZ*uF%U*iGP-|N;ZP_ICJwOg;Gq}ia>(l~OFO0Quqt>cw+ z+xQQx)+H+Z=zhzYCvsUqv934SU!1(P#l$?#QOMb6#=sSNt@&zjIF@_Pft}=N>MTJMY|aUsxSRtm|K48+VuJ*m8VF z2&-@T!oe9IpTo#cIpnDv@)h#mVdTFf$bZiu|2>QR=j6K<1Np3hPzhRq#nHTJcYtl#Q5Z+gbFAz0yiIEAscbrZNBV?NAR;hfrld9;CgV7GPr zCVS6YC*rVI3w!8<{NB16_a?i{<7{@G{o_SmS63K){bt*OYX18c;;`Ph%AF6-9dp2ZG|b1(eK76cPBg%?gxx z@1464`${c*qX+A{E&qAs6ZXZqy>~IP_r8<&p7Sryc>`><89Qx#zZq7qh3wQ54eD+5 z4&FD;SOH@p&ip#m`Te9CR*8PLhht1vChQo}L%eVIA>LY7GCWL--G25{UF?%0k)-cS@BIcs-+7Lsf*sJDh*wiCmN1U@i5?Qn!`?VWqc3`}k zvNpzVQlGsi78Put^qoD3dtMgbZ#4QT`g1>By%&zP3iqN7Si^eE$E5GNF~D=Iq;|9! z^nJI@na{bHo{ML#0`c5X8qe^T^Y1%)1nvWD8JiU@md>6Q+<4xd&&F{+;O^R>Rw{S9 zV>YN2%3aXs`G(c?HrC$v#xFCr9TVik9o?B*0Y1$6rZ9o;Yw)K-#>3D-teSC*i~EO- z4Ug-@9LBc&DKK8t0*E;SV{cZv=f+MepK`};+rYVJJ>`p&Yd6U zC-k?+@p2a1CJK!2zv%9U{difVSBUkBit!?z5vhWP99(k zIS&-vJn-c|nFm_YSMQjl>)iRx?Wv1vmT|?{4eGTD?u$154eEO2%5!^)+junM)~|8x zgw-!$W~ZLuSp7ZX*TQ+sIqyb0=iwAOI~Kj!?ZY|ujMZ0T!4DeU{+|AaOY}cFk3Q#N z_91V)2K62{UsNDp;JXs)UcTV{Mm!=W8JouuSNz`N)X!RD$c1L??XwfEuWrDaP5eU$ zZ=H4Ue`h^!V?9pZn1l~R=GEbxg*$zo&usqY&hMwZR|?wrJazJE!EW=B>E_d&n2+h^ z)1BD2F}z!HJ~a`WJ7Mp>{DQ|Q4uRxu#Dt$5o z8`A?H)NH1GNHbG3xNX#Ka=6omzdUd2AN`;<>{Lh6!HRb~q~U+ho(5Y^B{ewrhv=pzo`-U||1YM&Ibr92Vp%7^i?3SNTi_?aai$Qx zW?3u1L*OxR4ZIz^1-uKq6TBb14?GK=1>ei{|FW!U@V($Cz+VFY33%WQ%fbfJTJRO% zZ@y_+9pG<)-wM9y=aw}J-u_F=fxV_M3cA0_3ktCY(ZT|p7l z@eP5BKejCXHx9IMacAG7%0KuX_J1MpP{rQL&sRODjxWI9B%J>3;KzT8^?~!lHoHJa z(Z>H~f*)?{2mKIjY?~i$%YtUh`tC*B$uhl3w0*Cv?K!lS+k4ry=Z(SqCrs%3I`E?Q z#leja;+qE|*$p4 zl=n6CI`+}QwChh{x(~XKU{5_vd9F{OEsr*yn>Sasdz{;UhPmRU2kjm2W|srzG~0zw zoDSH!EvZM9hkal0KNQ$o@%hRJtHxFQm5KKyggK^uZCTxH6A!nsFHFOK_}{6>BM1lr zf`A|(2nYg#fFK|U2m*qDARq_`0)l`bAP5Kof`A|(2nYg#fFK|U2m*qDARq_`0)l`b zAP5Kof`A|(2nYg#fFK|U2m*qDARq_`0)l`bAP5Kof`A|(2nYg#fFK|U2m*qDARq_` z0)l`bAP5Kof`A|(2nYg#fFK|U2m*qDARq_`0)l`bAP5Kof`A|(2nYg#fFK|U2m*qD zARq_`0)l`bAP5Kof`A|(2nYg#fFK|U2m*qDARq_`0)l`bAP5Kof`A|(2nYg#fFK|U z2m*qDARq_`0)l`bAP5Kof`A|(2nYg#fFK|U2m*qDARq_`0)l`bAP5Kof`A|(2nYg# zfFK|U2m*qDARq_`0)l`bAP5Kof`A|(2nYg#fFK|U2m*qDARq_`0)l`bAP5Kof`A|( z2nYg#fFK|U2m*qDARq_`0)l`bAP5Kof`A|(2nYg#fFK|U2m*qDARq_`0)l`bAP5Ko zf`A|(2nYg#fFK|U2m*qDARq_`0)l`bAP5Kof`B0Ke~&;>b>^UeeHK5=ce_0A@_jBp z1il#ZpMx(4KfYL@%fSPn%RnbkUjfc0x$PzBRefcAypK@gfK7*uEp z_?arArQjjZB_Or~)gchu8S;U{&JY;e8Cn32enSy(^c&K_(QoJqaJIqE+mi_EpbDrnP653~7Ov~k`!$h;7mqA6)G>D&<0O|zFdC((RNEZCMb?ZK; zMXvks&GlMy;|ChIYinXn*TkCET&+chhSS68{&aFAT~Dn8so}v)O6%!Q4)kibr-w%} zg9F+%jj_h7W3gCEOw%HppqSFox^d&jZzvJfzw101zpFr=Z}1#TA5VVfUDoNzHQpey zithk)uYV^Bp1hNtV4la5cU?f9zkq!50`ln#$WL5AK6?TAnG48+i+J%>REiJBgtz`P z7un!sOXcj>p4{MIB;{S@w_ZTL_X2YE%kur}LW?*4T^zLYJf3`~BY)TVv9Fig??8*! z|Ku`TeqR5U68UjXI`ceUf8)w|glO{Qtrw%xJFtxuP6UApY8>es866%?ZlcB;HgtZh zF}W$Txj)%ELXE@e-ps(}L24Wr98EW(PvfR-nf}!3Oo|%&k|TZ8n7U(NDA>hPmX{Ob^DlyY~*l?xqnK>>1p;H9dgZ5F6r|Cr3wzGn=-Jrbp(7XWmwJ z+yNQv=+o|{IDL=S`g2X_4u4&%A&&O4!5xm$5uNCBD;;xB_=+PyvHkUL<64{+?US@ zCeB^nxZKWk3y9AaF7x@qq@m2?vMnB$pFR+$L)PPSj)`&b?6DqW_-PRL9vykN@P66ePo_a0Y|#|;_|eWpZ@ZSZqHh|8>(haS^ml)cBZ_eC^#dhI6g z1g+&x?&IklK%LWvAH??rCQrtyUU>>-4nx-C`vVi>;60w+zo5a}%a@_U6vITgjUU$I ze#b#PKeoqbF_VXx-NZk5z6Emif_(pA;{Ej=?!z{}4Pv`&uNyi{rH^O(BpO)~bA_yz zDp6z^(|@?!6CG!J_GFzF9+RIRf&LqQWmoWX{F3w6!M6BeUecXTLho0$#QE{`{s(c0 BShN5D literal 0 HcmV?d00001 diff --git a/example/android/app/libs/mips64/libLZO.so b/example/android/app/libs/mips64/libLZO.so new file mode 100644 index 0000000000000000000000000000000000000000..2896f0b0593140462e2f61738bf5c3221d5fa03a GIT binary patch literal 15200 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%0A=vc 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 literal 0 HcmV?d00001 diff --git a/example/android/app/libs/x86_64/libLZO.so b/example/android/app/libs/x86_64/libLZO.so new file mode 100644 index 0000000000000000000000000000000000000000..c8abbd311dc307d294892b1cf20111e330b884f1 GIT binary patch literal 18368 zcmeHve|!{GmTy;ghcrJ-HHZ>_O&)Aooqdma>mobrtlbGD{1_Dmbx;(-FHIZ3fDVKJ zsr{a+x=E*nncdHR_CKyxoqNu`=l(eN+;h&o>Ecf-= zAlhP^3-23j`L<~wJMolS#n~`vHO8UKsz>A;D}OoQUSLu=w7E^3_^8j)B_>`PnhJN= zO`Jo{M`Yrww)mRn`tnzH=r7|QAjk>_Ajz?=Le_sieeigoJl5HGv zzVCpK#`zyj4_ka!l1tJWKZlv~n~TmIc$Pl+h%LHf_la?MS7X2SAy4$MH*Wq6cx>YFyykphhoM#d*SmQrz(R-|RxO~5`=xtf_T=31Y z&9vEWHru(&V#v4X#a@%XcDf0REcz=}JHG}_=^l$-n$cGwz{QDw^T zs1HuCMrSo_H40!f7_P%~Al|yBS_onlRsq6@U?>f%AZTm-)?2VOTDyAwd<&^Pcs zoRG~Rn?_sn20ZzAtZiuH`{gFkD3R^_8XghPEqKU|(pH{_Co^&P!D <;|^WFBE1 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 ^b2%gnTR(7m`}rw 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 Ds-Z}J literal 0 HcmV?d00001 diff --git a/example/android/app/src/debug/AndroidManifest.xml b/example/android/app/src/debug/AndroidManifest.xml index 4622f1a..296a333 100644 --- a/example/android/app/src/debug/AndroidManifest.xml +++ b/example/android/app/src/debug/AndroidManifest.xml @@ -4,4 +4,10 @@ to allow setting breakpoints, to provide hot reload, etc. --> + + + + + diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml index d6a0d05..0592249 100644 --- a/example/android/app/src/main/AndroidManifest.xml +++ b/example/android/app/src/main/AndroidManifest.xml @@ -1,5 +1,5 @@ - + @@ -9,6 +9,7 @@ android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" + android:requestLegacyExternalStorage="true" android:windowSoftInputMode="adjustResize"> + + + + + diff --git a/example/lib/main.dart b/example/lib/main.dart index 2340eeb..f74e3ee 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -1,8 +1,12 @@ import 'dart:async'; +import 'dart:convert'; import 'package:flutter/material.dart'; +import 'package:hy_printer/device.dart'; +import 'package:hy_printer/dj_printer.dart'; import 'package:hy_printer/hy_printer.dart'; import 'package:hy_printer_example/scan_page.dart'; +import 'package:permission_handler/permission_handler.dart'; void main() { runApp(const MyApp()); @@ -16,95 +20,186 @@ class MyApp extends StatefulWidget { } class _MyAppState extends State { + List devices = []; @override void initState() { super.initState(); initPlatformState(); } + // Future initPlatformState() async { + // if (!mounted) return; + // setState(() {}); + // } Future initPlatformState() async { - if (!mounted) return; - setState(() {}); - } + var per = await Permission.bluetooth.isGranted; + if (!per) { + Permission.bluetooth.request(); + } + var pers = await Permission.locationWhenInUse.isGranted; + if (!pers) { + Permission.locationWhenInUse.request(); + } + var per1 = await Permission.bluetoothScan.isGranted; + if (!per1) { + Permission.bluetoothScan.request(); + } + var per2 = await Permission.bluetoothConnect.isGranted; + if (!per2) { + Permission.bluetoothConnect.request(); + } - @override - Widget build(BuildContext context) { - return const MaterialApp( - home: Home(), - ); - } -} + DjPrinter().init(); + DjPrinter().addDiscoveryListen(onReceive: (data) { + var js = json.decode(data.toString()); + if ((js['name'] as String).startsWith('HM')) { + devices.add(Device( + name: js['name'], + address: js['address'], + isPaired: js['isPaired'])); + } -class Home extends StatefulWidget { - const Home({Key? key}) : super(key: key); - @override - _HomeState createState() => _HomeState(); -} -class _HomeState extends State { - int status = -1; + setState(() {}); + }, onStart: () { + print("————————————————————————"); + }, onFinish: () { + print('——————————————————————————————'); + DjPrinter().cancelDiscovery(); + }); + DjPrinter().addConnectListen(onConnect: () { + print("connected"); + }, onDisconnect: () { + print('disconnected'); + }); + } + + @override - Widget build(BuildContext context) { - return Scaffold( + Widget build(BuildContext context) {return MaterialApp( + home: Scaffold( appBar: AppBar( title: const Text('Plugin example app'), ), body: Center( - child: Column( - children: [ - TextButton( - onPressed: () { - Navigator.push(context, MaterialPageRoute(builder: (context) { - return const ScanPage(); - })); - }, - child: const Text('扫描设备')), - TextButton( - onPressed: () async { - await HyPrinter.disConnect(); - }, - child: const Text('断开连接')), - TextButton( - onPressed: () async { - status = await HyPrinter.getStatus(); - setState(() {}); - }, - child: Text('$status')), - TextButton( - onPressed: () async { - await HyPrinter.printAsOrder( - code: 'ASASNB2021121200011', - fbaCode: '', - channel: "", - country: '', - count: "2/10", - hasPlan: false); - setState(() {}); - }, - child: const Text('打印面单')), - TextButton( - onPressed: () async { - await HyPrinter.printAsOrder( - code: 'ASASNB2021121200010002', - fbaCode: 'FBA15RY33MN8U00001', - channel: "欧洲特快", - country: '法国', - count: "2/10", - hasPlan: true); - setState(() {}); - }, - child: const Text('打印FBA面单')), - TextButton( - onPressed: () async { - await HyPrinter.printBarCode(0, 0, "2", "1", "130", "45", "26", - true, "8", "14", "12345678"); - setState(() {}); - }, - child: const Text('打印条码')), - ], - )), - ); + child: Column( + children: [ + TextButton( + onPressed: () { + devices.clear(); + setState(() {}); + DjPrinter().startSearch; + }, + child: const Text('扫描设备')), + // TextButton(onPressed: () {}, child: const Text('打印')), + const SizedBox( + height: 20, + ), + ...devices + .map((e) => TextButton( + onPressed: () { + [Permission.bluetoothConnect,].request().then((value) async { + print("===============${value[Permission.bluetoothConnect]}"); + if(value[Permission.bluetoothConnect]!=PermissionStatus.denied){ + await DjPrinter().connect(e.address); + } + }); + // + + }, + child: Column( + children: [ + Text(e.name), + Text(e.address), + ], + ))) + .toList(), + const SizedBox( + height: 20, + ), + TextButton( + onPressed: () { + + // DjPrinter().printNewAScode( + // code: 'ASSZ000000002', + // barCode: 'ASSZ0000000020001', + // channel: '加拿大温哥华海派快线-', + // country: '美国', + // num: '2', + // sum:'9', + // offset: 0, + // hasPlan: true, ); + + DjPrinter().printNewAScode( + code: 'ASSZ000000002', + barCode: 'ASSZ0000000020001', + channel: '加拿大温哥华海派快线-卡派 / UPS派送', + country: '美国啊啊', + num: '2', + sum:'999', + offset: 0, + hasPlan: true, ); + // DjPrinter().printNewAScode( + // code: 'ASSZ000000002', + // barCode: 'ASSZ0000000020001', + // channel: '加拿大温哥华海派快线-卡派 / UPS派送', + // country: '捷克斯洛伐克', + // num: '2', + // sum:'99', + // offset: 0, + // hasPlan: true, ); + }, + child: const Text('打印')), + TextButton( + onPressed: () { + + // DjPrinter().printNewAScode( + // code: 'ASSZ000000002', + // barCode: 'ASSZ0000000020001', + // channel: '加拿大温哥华海派快线-', + // country: '美国', + // num: '2', + // sum:'9', + // offset: 0, + // hasPlan: true, ); + + DjPrinter().printNewAScode( + code: 'ASSZ000000002', + barCode: 'ASSZ0000000020001', + channel: '加拿大温哥华海派快线-卡派 / UPS派送', + country: '美国啊啊', + num: '2', + sum:'999', + offset: 0, + hasPlan: false, ); + // DjPrinter().printNewAScode( + // code: 'ASSZ000000002', + // barCode: 'ASSZ0000000020001', + // channel: '加拿大温哥华海派快线-卡派 / UPS派送', + // country: '捷克斯洛伐克', + // num: '2', + // sum:'99', + // offset: 0, + // hasPlan: true, ); + }, + child: const Text('noplan打印')), + const SizedBox( + height: 20, + ), + TextButton( + onPressed: () { + DjPrinter().disposeConnect(); + }, + child: const Text('取消链接')), + + ], + ), + ), + ), + ); } } + + diff --git a/example/lib/scan_page.dart b/example/lib/scan_page.dart index 8883961..086ff23 100644 --- a/example/lib/scan_page.dart +++ b/example/lib/scan_page.dart @@ -1,51 +1,52 @@ -import 'package:flutter/material.dart'; -import 'package:hy_printer/device.dart'; -import 'package:hy_printer/hy_printer.dart'; - -class ScanPage extends StatefulWidget { - const ScanPage({Key? key}) : super(key: key); - - @override - _ScanPageState createState() => _ScanPageState(); -} - -class _ScanPageState extends State { - List _devices = []; - - @override - void initState() { - init(); - super.initState(); - } - - Future init() async { - _devices = await HyPrinter.getDeiveces(); - setState(() {}); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text('设备列表'), - ), - body: ListView( - padding: const EdgeInsets.all(10), - children: _devices - .map((e) => TextButton( - onPressed: () async { - var result = await HyPrinter.connect(e.address); - if (result == 0) { - Navigator.pop(context); - } - }, - child: Column( - children: [ - Text(e.name), - Text(e.address), - ], - ))) - .toList()), - ); - } -} +// import 'package:flutter/material.dart'; +// import 'package:hy_printer/device.dart'; +// import 'package:hy_printer/hy_printer.dart'; +// +// class ScanPage extends StatefulWidget { +// const ScanPage({Key? key}) : super(key: key); +// +// @override +// _ScanPageState createState() => _ScanPageState(); +// } +// +// class _ScanPageState extends State { +// List _devices = []; +// +// @override +// void initState() { +// HyPrinter.init(); +// init(); +// super.initState(); +// } +// +// Future init() async { +// _devices = await HyPrinter.getDeiveces(); +// setState(() {}); +// } +// +// @override +// Widget build(BuildContext context) { +// return Scaffold( +// appBar: AppBar( +// title: const Text('设备列表'), +// ), +// body: ListView( +// padding: const EdgeInsets.all(10), +// children: _devices +// .map((e) => TextButton( +// onPressed: () async { +// var result = await HyPrinter.connect('04:7F:0E:95:FD:A1'); +// if (result == 0) { +// Navigator.pop(context); +// } +// }, +// child: Column( +// children: [ +// Text(e.name), +// Text(e.address), +// ], +// ))) +// .toList()), +// ); +// } +// } diff --git a/example/pubspec.lock b/example/pubspec.lock index e9bf57f..e4ca30f 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -7,7 +7,7 @@ packages: name: async url: "https://pub.flutter-io.cn" source: hosted - version: "2.7.0" + version: "2.8.2" boolean_selector: dependency: transitive description: @@ -21,7 +21,7 @@ packages: name: characters url: "https://pub.flutter-io.cn" source: hosted - version: "1.1.0" + version: "1.2.0" charcode: dependency: transitive description: @@ -42,47 +42,47 @@ packages: name: collection url: "https://pub.flutter-io.cn" source: hosted - version: "1.15.0" + version: "1.16.0" convert: dependency: transitive description: name: convert url: "https://pub.flutter-io.cn" source: hosted - version: "3.0.1" + version: "3.0.2" cupertino_icons: dependency: "direct main" description: name: cupertino_icons url: "https://pub.flutter-io.cn" source: hosted - version: "1.0.3" + version: "1.0.5" fake_async: dependency: transitive description: name: fake_async url: "https://pub.flutter-io.cn" source: hosted - version: "1.2.0" + version: "1.3.0" fixnum: dependency: transitive description: name: fixnum url: "https://pub.flutter-io.cn" source: hosted - version: "1.0.0" + version: "1.0.1" flutter: dependency: "direct main" description: flutter source: sdk version: "0.0.0" - flutter_blue: + flutter_blue_plus: dependency: transitive description: - name: flutter_blue + name: flutter_blue_plus url: "https://pub.flutter-io.cn" source: hosted - version: "0.8.0" + version: "1.3.1" flutter_lints: dependency: "direct dev" description: @@ -115,35 +115,84 @@ packages: name: matcher url: "https://pub.flutter-io.cn" source: hosted - version: "0.12.10" + version: "0.12.11" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.1.4" meta: dependency: transitive description: name: meta url: "https://pub.flutter-io.cn" source: hosted - version: "1.4.0" + version: "1.7.0" path: dependency: transitive description: name: path url: "https://pub.flutter-io.cn" source: hosted - version: "1.8.0" + version: "1.8.1" + permission_handler: + dependency: "direct main" + description: + name: permission_handler + url: "https://pub.flutter-io.cn" + source: hosted + version: "10.0.0" + permission_handler_android: + dependency: transitive + description: + name: permission_handler_android + url: "https://pub.flutter-io.cn" + source: hosted + version: "10.0.0" + permission_handler_apple: + dependency: transitive + description: + name: permission_handler_apple + url: "https://pub.flutter-io.cn" + source: hosted + version: "9.0.4" + permission_handler_platform_interface: + dependency: transitive + description: + name: permission_handler_platform_interface + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.7.0" + permission_handler_windows: + dependency: transitive + description: + name: permission_handler_windows + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.1.0" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.2" protobuf: dependency: transitive description: name: protobuf url: "https://pub.flutter-io.cn" source: hosted - version: "2.0.0" + version: "2.1.0" rxdart: dependency: transitive description: name: rxdart url: "https://pub.flutter-io.cn" source: hosted - version: "0.26.0" + version: "0.27.5" sky_engine: dependency: transitive description: flutter @@ -155,7 +204,7 @@ packages: name: source_span url: "https://pub.flutter-io.cn" source: hosted - version: "1.8.1" + version: "1.8.2" stack_trace: dependency: transitive description: @@ -190,21 +239,21 @@ packages: name: test_api url: "https://pub.flutter-io.cn" source: hosted - version: "0.4.1" + version: "0.4.9" typed_data: dependency: transitive description: name: typed_data url: "https://pub.flutter-io.cn" source: hosted - version: "1.3.0" + version: "1.3.1" vector_math: dependency: transitive description: name: vector_math url: "https://pub.flutter-io.cn" source: hosted - version: "2.1.0" + version: "2.1.2" sdks: - dart: ">=2.12.0 <3.0.0" - flutter: ">=1.20.0" + dart: ">=2.17.0-0 <3.0.0" + flutter: ">=2.8.0" diff --git a/example/pubspec.yaml b/example/pubspec.yaml index cc5f02a..d0b091f 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -17,7 +17,7 @@ environment: dependencies: flutter: sdk: flutter - + permission_handler: 10.0.0 hy_printer: # When depending on this package from a real application you should use: # hy_printer: ^x.y.z diff --git a/hy_printer.iml b/hy_printer.iml index a966544..e5eda02 100644 --- a/hy_printer.iml +++ b/hy_printer.iml @@ -12,6 +12,7 @@ + diff --git a/lib/device.dart b/lib/device.dart index 5f34321..545e705 100644 --- a/lib/device.dart +++ b/lib/device.dart @@ -1,9 +1,11 @@ class Device { - final String name; - final String address; + String name; + String address; + bool isPaired; - const Device({ + Device({ required this.name, required this.address, + required this.isPaired, }); } diff --git a/lib/dj_printer.dart b/lib/dj_printer.dart new file mode 100644 index 0000000..465eec1 --- /dev/null +++ b/lib/dj_printer.dart @@ -0,0 +1,199 @@ +import 'dart:async'; +import 'dart:convert'; +import 'dart:typed_data'; +import 'dart:ui'; + + +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:hy_printer/status_enum.dart'; + +class DjPrinter { + static late final DjPrinter _instance = DjPrinter._(); + + DjPrinter._(); + + factory DjPrinter() => _instance; + static const MethodChannel _channel = MethodChannel('hy_printer'); + static const EventChannel _deviceChannel = + EventChannel("com.discovery.devices"); + StreamSubscription? _discoveryStream; + + StreamSubscription addDiscoveryListen( + {required void Function(dynamic data) onReceive, + void Function()? onStart, + void Function()? onFinish}) { + if (_discoveryStream == null) { + return _deviceChannel.receiveBroadcastStream().listen((data) { + if (data == "start" && onStart != null) { + onStart(); + } else if (data == "finish" && onFinish != null) { + onFinish(); + } else { + onReceive(data); + } + }); + } else { + return _discoveryStream!; + } + } + + void cancelDiscovery() { + _discoveryStream?.cancel(); + _discoveryStream = null; + print('结束搜索'); + disposeDiscovery(); + } + + static const EventChannel _connectChannel = EventChannel("com.connect"); + StreamSubscription? _connectStream; + + StreamSubscription addConnectListen({required void Function() onConnect, + required void Function() onDisconnect}) { + if (_connectStream == null) { + return _connectChannel.receiveBroadcastStream().listen((data) { + if (data == 'connected') { + onConnect(); + } else if (data == 'disconnected') { + onDisconnect(); + } + }); + } else { + return _connectStream!; + } + } + + void cancelConnect() { + if (_connectStream != null) { + _connectStream!.cancel(); + _connectStream = null; + } + } + + void get startSearch { + final res = _channel.invokeMethod('startSearch'); + } + + bool _hasInit = false; + + bool get hasInit => _hasInit; + + Future connect(String address) async { + + await Future.delayed(const Duration(milliseconds: 2000), () async { + var res = await _channel.invokeMethod('connect', {'address': address}); + print('connect'); + print(res); + }); + return true; + } + + void disposeDiscovery() { + print('disposeDiscovery'); + final res = _channel.invokeMethod('disposeDiscovery'); + } + + Future disposeConnect() async { + final res = await _channel.invokeMethod('disposeConnect'); + return res; + } + + Future init() async { + final res = await _channel.invokeMethod('init'); + _hasInit = true; + return res; + } + + //0 normal + //1 busy + //2 paper empty + //4 cover open + //8 battery low + // Future getStatus() async { + // final res = await _channel.invokeMethod('getStatus'); + // switch (res) { + // case 0: + // return PRINT_STATUS.normal; + // case 1: + // return PRINT_STATUS.busy; + // case 2: + // return PRINT_STATUS.paperEmpty; + // case 4: + // return PRINT_STATUS.coverOpen; + // case 8: + // return PRINT_STATUS.batteryLow; + // default: + // return null; + // } + // } + + + + //0 normal + //-1 发送失败 + //2 paper empty + //6 cover open + + Future getStatus() async { + final res = await _channel.invokeMethod('getStatus'); + switch (res) { + case 0: + return PRINT_STATUS.normal; + case -1: + return PRINT_STATUS.fail; + case 2: + return PRINT_STATUS.paperEmpty; + case 6: + return PRINT_STATUS.coverOpen; + default: + return null; + } + } + + Future printNewAScode({required String code, + required String barCode, + required String channel, + required String country, + required String num, + required String sum, + required int offset, + required bool hasPlan}) async { + final res = await _channel.invokeMethod('newPrint', { + 'code': code, + 'barCode':barCode, + 'channel': channel, + 'country': country, + 'num': num, + 'sum': sum, + 'offset': offset, + 'hasPlan': hasPlan, + }); + return res; + } + + + + + Future printAScode({required String code, + required String channel, + required String country, + required String countStr, + required int offset, + required bool hasPlan}) async { + final res = await _channel.invokeMethod('print', { + 'code': code, + 'channel': channel, + 'country': country, + 'countStr': countStr, + 'offset': offset, + 'hasPlan': hasPlan, + }); + return res; + } + + + + + + } + diff --git a/lib/hy_printer.dart b/lib/hy_printer.dart index 607db8b..8b2277a 100644 --- a/lib/hy_printer.dart +++ b/lib/hy_printer.dart @@ -1,141 +1,155 @@ -import 'dart:async'; - -import 'package:flutter/services.dart'; -import 'package:flutter_blue/flutter_blue.dart'; -import 'package:hy_printer/device.dart'; - -class HyPrinter { - static const MethodChannel _channel = MethodChannel('hy_printer'); - static FlutterBlue flutterBlue = FlutterBlue.instance; - - static void init() {} - - static Future> getDeiveces() async { - var devices = []; - await flutterBlue.startScan(timeout: const Duration(seconds: 4)); - flutterBlue.scanResults.listen((results) { - for (ScanResult r in results) { - //过滤名称为空的蓝牙 - if (r.device.name.isNotEmpty) { - devices.add(Device(name: r.device.name, address: r.device.id.id)); - } - } - }); - await flutterBlue.stopScan(); - return devices; - } - - static Future blutIsOn() async { - var result = await flutterBlue.isOn; - return result; - } - - ///0:连接成功 - ///-1:连接超时 - ///-2:地址格式错误 - ///-3:打印机与sdk不匹配 - ///-4:连接失败 - static Future connect(String address) async { - int result = -4; - await Future.delayed(const Duration(milliseconds: 2000), () async { - result = await _channel.invokeMethod('connect', {'address': address}); - }); - // int result = await _channel.invokeMethod('connect', {'address': address}); - return result; - } - - static Future disConnect() async { - bool result = await _channel.invokeMethod('disConnect'); - return result; - } - - ///0:打印机正常 - ///-1:发送失败 - ///2:缺纸 - ///3:开盖 - static Future getStatus() async { - int result = await _channel.invokeMethod( - 'getStatus', - ); - return result; - } - - static Future printBarCode( - int direction, - int type, - String width, - String ratio, - String height, - String x, - String y, - bool undertext, - String size, - String offset, - String data, - ) async { - int result = await _channel.invokeMethod('printBarCode', { - 'direction': direction, - 'type': type, - 'width': width, - 'ratio': ratio, - 'height': height, - 'x': x, - 'y': y, - 'undertext': undertext, - 'size': size, - 'offset': offset, - 'data': data, - }); - return result; - } - - static Future printLine( - String x0, - String y0, - String x1, - String y1, - ) async { - int result = await _channel - .invokeMethod('printLine', {'x0': x0, 'x1': x1, 'y0': y0, 'y1': y1}); - return result; - } - - static Future align(String align) async { - int result = await _channel.invokeMethod('align', {'align': align}); - return result; - } - - static Future setBold(String bold) async { - int result = await _channel.invokeMethod('setBold', {'bold': bold}); - return result; - } - - static Future prefeed(String prefeed) async { - int result = await _channel.invokeMethod('setBold', {'prefeed': prefeed}); - return result; - } - - /// 'code': code, 箱号 - // 'fbaCode': fbaCode, fba号/非fba传空字符串 - // 'channel': channel,渠道名称 - // 'country': country,目的国 - // 'count': count,货件数量 - // 'hasPlan':hasPlan 有无计划 - static Future printAsOrder( - {required String code, - required String fbaCode, - required String channel, - required String country, - required String count, - required bool hasPlan}) async { - int result = await _channel.invokeMethod('printAsOrder', { - 'code': code, - 'fbaCode': fbaCode, - 'channel': channel, - 'country': country, - 'count': count, - 'hasPlan': hasPlan - }); - return result; - } -} +// import 'dart:async'; +// +// import 'package:flutter/services.dart'; +// // import 'package:flutter_blue/flutter_blue.dart'; +// import 'package:flutter_blue_plus/flutter_blue_plus.dart'; +// import 'package:hy_printer/device.dart'; +// import 'package:permission_handler/permission_handler.dart'; +// +// class HyPrinter { +// static const MethodChannel _channel = MethodChannel('hy_printer'); +// static FlutterBluePlus flutterBlue = FlutterBluePlus.instance; +// static void init() async { +// var per = await Permission.bluetooth.isGranted; +// if (!per) { +// Permission.bluetooth.request(); +// } +// var pers = await Permission.locationWhenInUse.isGranted; +// if (!pers) { +// Permission.locationWhenInUse.request(); +// } +// } +// +// static Future> getDeiveces() async { +// var devices = []; +// await flutterBlue.startScan(timeout: const Duration(seconds: 4)); +// flutterBlue.scanResults.listen((results) { +// for (ScanResult r in results) { +// //过滤名称为空的蓝牙 +// if(r.device.name.contains('HM')){ +// devices.add(Device(name: r.device.name, address: r.device.id.id)); +// } +// +// // if (r.device.name.isNotEmpty) { +// // devices.add(Device(name: r.device.name, address: r.device.id.id)); +// // } +// } +// }); +// await flutterBlue.stopScan(); +// return devices; +// } +// +// static Future blutIsOn() async { +// var result = await flutterBlue.isOn; +// return result; +// } +// +// ///0:连接成功 +// ///-1:连接超时 +// ///-2:地址格式错误 +// ///-3:打印机与sdk不匹配 +// ///-4:连接失败 +// static Future connect(String address) async { +// int result = -4; +// await Future.delayed(const Duration(milliseconds: 2000), () async { +// result = await _channel.invokeMethod('connect', {'address': address}); +// }); +// // int result = await _channel.invokeMethod('connect', {'address': address}); +// return result; +// } +// +// static Future disConnect() async { +// bool result = await _channel.invokeMethod('disConnect'); +// return result; +// } +// +// ///0:打印机正常 +// ///-1:发送失败 +// ///2:缺纸 +// ///3:开盖 +// static Future getStatus() async { +// int result = await _channel.invokeMethod( +// 'getStatus', +// ); +// return result; +// } +// +// static Future printBarCode( +// int direction, +// int type, +// String width, +// String ratio, +// String height, +// String x, +// String y, +// bool undertext, +// String size, +// String offset, +// String data, +// ) async { +// int result = await _channel.invokeMethod('printBarCode', { +// 'direction': direction, +// 'type': type, +// 'width': width, +// 'ratio': ratio, +// 'height': height, +// 'x': x, +// 'y': y, +// 'undertext': undertext, +// 'size': size, +// 'offset': offset, +// 'data': data, +// }); +// return result; +// } +// +// static Future printLine( +// String x0, +// String y0, +// String x1, +// String y1, +// ) async { +// int result = await _channel +// .invokeMethod('printLine', {'x0': x0, 'x1': x1, 'y0': y0, 'y1': y1}); +// return result; +// } +// +// static Future align(String align) async { +// int result = await _channel.invokeMethod('align', {'align': align}); +// return result; +// } +// +// static Future setBold(String bold) async { +// int result = await _channel.invokeMethod('setBold', {'bold': bold}); +// return result; +// } +// +// static Future prefeed(String prefeed) async { +// int result = await _channel.invokeMethod('setBold', {'prefeed': prefeed}); +// return result; +// } +// +// /// 'code': code, 箱号 +// // 'fbaCode': fbaCode, fba号/非fba传空字符串 +// // 'channel': channel,渠道名称 +// // 'country': country,目的国 +// // 'count': count,货件数量 +// // 'hasPlan':hasPlan 有无计划 +// static Future printAsOrder( +// {required String code, +// required String fbaCode, +// required String channel, +// required String country, +// required String count, +// required bool hasPlan}) async { +// int result = await _channel.invokeMethod('printAsOrder', { +// 'code': code, +// 'fbaCode': fbaCode, +// 'channel': channel, +// 'country': country, +// 'count': count, +// 'hasPlan': hasPlan +// }); +// return result; +// } +// } diff --git a/lib/status_enum.dart b/lib/status_enum.dart new file mode 100644 index 0000000..4373b41 --- /dev/null +++ b/lib/status_enum.dart @@ -0,0 +1,13 @@ +// enum PRINT_STATUS { +// normal, +// busy, +// paperEmpty, +// coverOpen, +// batteryLow, +// } +enum PRINT_STATUS { + normal, + fail, + paperEmpty, + coverOpen, +} diff --git a/pubspec.lock b/pubspec.lock index ed36223..d295394 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -7,7 +7,7 @@ packages: name: async url: "https://pub.flutter-io.cn" source: hosted - version: "2.7.0" + version: "2.8.2" boolean_selector: dependency: transitive description: @@ -21,7 +21,7 @@ packages: name: characters url: "https://pub.flutter-io.cn" source: hosted - version: "1.1.0" + version: "1.2.0" charcode: dependency: transitive description: @@ -42,40 +42,40 @@ packages: name: collection url: "https://pub.flutter-io.cn" source: hosted - version: "1.15.0" + version: "1.16.0" convert: dependency: transitive description: name: convert url: "https://pub.flutter-io.cn" source: hosted - version: "3.0.1" + version: "3.0.2" fake_async: dependency: transitive description: name: fake_async url: "https://pub.flutter-io.cn" source: hosted - version: "1.2.0" + version: "1.3.0" fixnum: dependency: transitive description: name: fixnum url: "https://pub.flutter-io.cn" source: hosted - version: "1.0.0" + version: "1.0.1" flutter: dependency: "direct main" description: flutter source: sdk version: "0.0.0" - flutter_blue: + flutter_blue_plus: dependency: "direct main" description: - name: flutter_blue + name: flutter_blue_plus url: "https://pub.flutter-io.cn" source: hosted - version: "0.8.0" + version: "1.3.1" flutter_lints: dependency: "direct dev" description: @@ -101,35 +101,84 @@ packages: name: matcher url: "https://pub.flutter-io.cn" source: hosted - version: "0.12.10" + version: "0.12.11" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.1.4" meta: dependency: transitive description: name: meta url: "https://pub.flutter-io.cn" source: hosted - version: "1.4.0" + version: "1.7.0" path: dependency: transitive description: name: path url: "https://pub.flutter-io.cn" source: hosted - version: "1.8.0" + version: "1.8.1" + permission_handler: + dependency: "direct main" + description: + name: permission_handler + url: "https://pub.flutter-io.cn" + source: hosted + version: "10.0.0" + permission_handler_android: + dependency: transitive + description: + name: permission_handler_android + url: "https://pub.flutter-io.cn" + source: hosted + version: "10.0.0" + permission_handler_apple: + dependency: transitive + description: + name: permission_handler_apple + url: "https://pub.flutter-io.cn" + source: hosted + version: "9.0.4" + permission_handler_platform_interface: + dependency: transitive + description: + name: permission_handler_platform_interface + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.7.0" + permission_handler_windows: + dependency: transitive + description: + name: permission_handler_windows + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.1.0" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.2" protobuf: dependency: transitive description: name: protobuf url: "https://pub.flutter-io.cn" source: hosted - version: "2.0.0" + version: "2.1.0" rxdart: dependency: transitive description: name: rxdart url: "https://pub.flutter-io.cn" source: hosted - version: "0.26.0" + version: "0.27.5" sky_engine: dependency: transitive description: flutter @@ -141,7 +190,7 @@ packages: name: source_span url: "https://pub.flutter-io.cn" source: hosted - version: "1.8.1" + version: "1.8.2" stack_trace: dependency: transitive description: @@ -176,21 +225,21 @@ packages: name: test_api url: "https://pub.flutter-io.cn" source: hosted - version: "0.4.1" + version: "0.4.9" typed_data: dependency: transitive description: name: typed_data url: "https://pub.flutter-io.cn" source: hosted - version: "1.3.0" + version: "1.3.1" vector_math: dependency: transitive description: name: vector_math url: "https://pub.flutter-io.cn" source: hosted - version: "2.1.0" + version: "2.1.2" sdks: - dart: ">=2.12.0 <3.0.0" - flutter: ">=1.20.0" + dart: ">=2.17.0-0 <3.0.0" + flutter: ">=2.8.0" diff --git a/pubspec.yaml b/pubspec.yaml index 530bee8..c094594 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -10,8 +10,8 @@ environment: dependencies: flutter: sdk: flutter - flutter_blue: ^0.8.0 - + flutter_blue_plus: ^1.3.1 + permission_handler: 10.0.0 dev_dependencies: flutter_test: sdk: flutter