TGViewer
开发者工具箱|编程·开发工具·资源 开发者工具箱|编程·开发工具·资源 @devtoolboxhub · 436 subscribers
Post #1905 3
Flutter 打印 Zebra 标签:去掉 SDK 的纯 Dart 方案

flutter_zpl_printer 是一个开源 Flutter 包,用纯 Dart 实现 Zebra 标签打印,支持 iOS、Android、macOS 和 Windows。它不走 Zebra 的 Link-OS SDK,而是直接使用打印机本身支持的协议:ZPL 负责标签内容,SGD 文本协议读写设置,~HS 查询主机状态,以及 Zebra 的蓝牙 LE GATT 服务。

早期版本封装 Link-OS SDK,带来三道墙:无法用 pub get 安装,iOS 蓝牙需要 Apple 的 MFi 审批,且只支持手机、不支持桌面端。0.1.0 起作者删除 SDK,改为直接实现上述协议,原生代码只用于 USB 枚举和权限申请。
蓝牙 LE 让 iOS 应用绕开 MFi 审批,代价是打印机需支持蓝牙 4.0 及以上,仅支持经典蓝牙的老机型无法连接。同时扫描蓝牙和 Wi-Fi 时,同一台打印机会以两个名字出现,两者都含序列号,可按序列号合并成一行,点击后优先走 Wi-Fi 再走蓝牙。
打印前先调 getStatus() 发送 ~HS,能识别打印头打开、缺纸、暂停、过热等状态,把静默失败变成用户可读的提示。图片打印有四种常见失败:内联图形不打印、深色图触发过热、切刀模式不吐纸、Z64 校验和错误;对应改用 ~DG 存储加 ^XG 调用、阈值抖动、撕纸模式和不压缩十六进制。0.1.2 修复了校验和计算错误。

Wi-Fi 连接手机热点时,首次连接因 NAT 和 DHCP 延迟较大,3 秒超时必然失败,8 秒加一次重试可用。蓝牙断连由 ReconnectableConnection 以指数退避恢复,重连成功后抛出 ReconnectSuccessException 且不自动重发,避免重复打印运单。

USB 在 macOS 未测试、Windows 测试失败,生产环境建议用蓝牙 LE 或 Wi-Fi。状态解析面向 ZPL 打印机,CPCL 机型可连接打印但状态回复格式不同。
More from @devtoolboxhub
  1. Oct 4, 2026LangGraphics:一行代码实时可视化 LangGraph 运行 LangGraphics 是一款轻量级工具,专为使用 LangGraph 或 DeepAgents 构建的代…
  2. Oct 4, 2026平台 Operator 现已支持 Application 更新的实时对齐 平台 Operator 通过 Kubernetes 自定义资源 Application 生成 Deploy…
  3. Oct 4, 2026Node.js Marketplace 运行手册:处理压缩堆栈的两类 JavaScript 错误 在选择错误跟踪系统时,Marketplace 团队需要先区分两类需求: 1. 能否…
  4. Oct 3, 2026OpenScout:本地开源模型驱动的活动筛选器 OpenScout 是一个自主运行的开发者活动通知工具,聚合并排序开发者活动、黑客松与开源聚会,按语义相关度打分。它面向一位常驻印…
  5. Oct 3, 2026WSL2 内存数字为何对不上 Windows 任务管理器显示 VmmemWSL 占用 8 GB,Ubuntu 里 htop 只看到约 2 GB。作者 Thuram OTCHOUN…
  6. Oct 2, 2026AWS AIF-C01 偏差与方差考点梳理 备考 AWS Certified AI Practitioner 时,偏差与方差是高频易错点。核心判断逻辑只有一条:训练集与未见数据的表…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →