0
点赞
收藏
分享

微信扫一扫

flutter bule 蓝牙打印 小标签/小票

思考的鸿毛 2021-09-19 阅读 201

蓝牙打印插件:

插件连接

https://github.com/xiyuxiaoxiao/flutter_public/tree/main/zs_bluetooth_printer

简介

  • 语言 Flutter, 支持 Android、 iOS
  • 由于项目需求涉及蓝牙打印,所以把打印模块单独写成了插件
  • 插件功能:
    1. 含有连接蓝牙设备的UI;
    2. 使用指令打印
      · 小标签打印, 使用CPCL指令打印, 会读取是否打印成功 在打印下一张,如果打印机断开或者没纸张了, 当打印机再次连接会重新打印,
      · 小票也可以直接将escpos指令传入打印
    3. 打印机型号 建议使用佳博型号:GP-M322

CPCL指令打印 已经支持封装好模版了,模版规范参考菜鸟组件; 只需要设置模版即可

最后只需要引入 zs_bluetooth_printer 即可

zs_bluetooth_printer

使用 步骤 一

引入:

zs_bluetooth_printer:
  git:
    url: https://github.com/xiyuxiaoxiao/flutter_public.git
    path: zs_bluetooth_printer
    

配置项目 添加蓝牙相关权限

    Android
            <uses-permission android:name="android.permission.READ_PHONE_STATE" />
            <uses-permission android:name="android.permission.BLUETOOTH"/>
            <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
            <uses-permission-sdk-23 android:name="android.permission.ACCESS_FINE_LOCATION"/>

        如果SDK报错 :
        android/build.gradle 下修改 minSdkVersion:19  compileSdkVersion  targetSdkVersion 为 28;  

    Ios
        -- info.plist
            Privacy - Bluetooth Always Usage Description
            Privacy - Bluetooth Peripheral Usage Description
        -- Background Modes
              Uses Bluetooth LE accessories
        需要录制打印视频上传优酷或者直接在appstore附件中添加视频说明

1. 继承ZsBluetoothPrinterApi 实现相关方法 ( class MyPrinter extends ZsBluetoothPrinterApi )
   在mian中初始化
    await ZsBluetoothPrinterManager.initPrinter(MyPrinter());

2. MaterialApp 中对 ScreenUtil 初始化 (因为内部使用了比例布局计算)
    builder: (context, child) {
        ScreenUtil.init(context, designSize: Size(750, 1334), allowFontScaling: false);
        return child;
    },
3. 路由中监听 判断是否是插件内部的页面 是的话直接使用插件的onGenerateRoute
    onGenerateRoute: (RouteSettings settings){
            var route = ZsBluetoothPrinterManager.onGenerateRoute(settings);
            if (route != null) {
              return route;
            }
    },

4. 在assets: 添加包内部资源文件
        - packages/zs_bluetooth_printer/img/dialog_error.png
        - packages/zs_bluetooth_printer/img/small_label_barcode.png
        - packages/zs_bluetooth_printer/img/ic_back.png

5. 使用打印方法
    // 检测是否有连接了打印
    var res = PrintUtil.checkPrinterConnect();

    // 检测模版是否配置
    awiat PrintUtil.checkSmallPrintTemple();

    // 加入打印队列
    PrintUtil(printJson: {}).addTask();


6. 监听蓝牙通知用
    需要监听对象实现接口 ZSNotifcationCenterDelegate
    abstract class ZSNotifcationCenterDelegate {
      observeNotify(String key, dynamic param); // observeNotify为通知回调
    }
    // 添加监听
    ZSNotifcationCenter.addObserveForKey(observe, Notify_Observe_StoreBluetooth_Key);
    // 移除监听
    ZSNotifcationCenter.removeObserve(observe);

    通知相关Key
        Notify_Observe_BlueState_Key;       // 蓝牙状态变化
        Notify_Observe_StoreBluetooth_Key;  // 存储连接的设备

二. 字体单位映射 默认使用毫米单位

1.  如果需要映射 设置 ZsBluetoothPrinterApi 的 fontSizeUnitMillimeter = false;
2.  重写 ZsBluetoothPrinterApi 的 fontSizeMapToMillimeter 默认使用系统的像素映射毫米

三. 显示浮窗显示任务个数

1.  设置 ZsBluetoothPrinterApi 的 showPrintTaskOverlay = true;
2.  需要在Page build中设置 appContent
    ZsBluetoothPrinterManager.setAppContext(context);
3.  自定义浮窗Widget 否则使用默认的
        重写 ZsBluetoothPrinterApi 的 printTaskOverlayWidget

具体可参考案例
https://github.com/xiyuxiaoxiao/flutter_public/tree/main/printer_example/test_app

CPCL小标签模版说明

模版json数据 赋值的 表示默认值
文字会自适应大小; 
字体大小规范 (2、2.5、3、4、5、6、7、8、9)mm 等大小
[{
    String fieldType = “text”; // 打印类型 text 、 barcode
    String field; // 内容对应的key
    String fieldHidden; // 动态隐藏标签字段  json[fieldHidden] == 1 显示  
    String text; // 标题 实际不同 对应菜鸟别名 (当 field 空的时候 展示的内容)
    String description; // 描述 用于展示模版的信息
    String left; // 定位 左
    String top; // 定位  上
    String width; // 控件所占宽度
    String height; // 控件所占高度
    String fontSize = “3”; // 字体大小
    String fontWeight = “0”; // 字体是否加粗 0 不加粗 1加粗
    int rotation = 0; // 旋转角度 90度
    int hideText = 1; // 是否隐藏barcode的文字: 0不隐藏 1隐藏
    int bgBlack = 0; // 背景是否黑色  1为黑色  0 白色
    String textAlign = “left”; //水平方向有效 只需要设置 left center right
    String textAlignVertical = “top”;//垂直方向有效 top center bottom
}]

demo UI

小标签打印结果:

举报

相关推荐

0 条评论