flutter:打印模板的动态化方案

引言

近期有朋友私信,希望能出一篇关于打印模版动态化的设计方案。由于最近也比较忙,小编简单的整理了一下设计框架。

背景回顾

之前出过一篇文章小票标签打印[跨平台解决方案],基于 Flutter 实现跨平台的打印设计。主要实现以下三点:

  • 票据样式: 拒绝硬编码,直接使用 flutter-widget 进行样式开发,更加直观灵活
  • 打印指令集: 不嵌入厂商的打印SDK,适配一码多用,无后续接入开发消耗
  • 传输方式: 指令集传输方式可扩展,底层代码无需变动

重点思想:

我们改变了之前使用硬编码的方式进行票据打印,将票据的样式改用 Flutter - widget 布局实现,最后使用光栅位图的统一标准进行指令集中转,得到我们要的打印指令的字节数据。

我们可以这样写票据样式:(build 方法内就是我们的票据样式内容)

dart 复制代码
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';

// ignore: depend_on_referenced_packages
import 'package:print_image_generate_tool/print_image_generate_tool.dart';

// 标签样式 demo
class LabelTemp extends StatelessWidget with ATempWidget {
  final String data;

  const LabelTemp(this.data, {Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.white,
      child: ...widget写样式...
    );
  }

  @override
  int get pixelPagerWidth => 360; //1mm对应8像素,45mm 对应像素宽度为 360

  @override
  int get pixelPagerHeight => 560; //1mm对应8像素,70mm 对应像素高度为 560
}

最后打印出来的票据样例如下:

动态化模板

既然我们是使用的 widget 绘制票据内容,只要我们解决了 flutter-widget 层的动态化设计,我们的打印模板就实现了动态化

模板结构:

小编将动态模板设计成两个部分:

  • 布局文件 (对于后管,需要动态下发的就是布局文件(固定格式的 json 文件))

我们将常用的布局元素例如:文本块、行、列、大小容器、权重控件、Padding 等进行映射封装,使其可以接受 json 进行转换成 widget。

  • 数据文件 (可以理解为接单后拿到的数据信息)

使用布局文件占位符的方式进行数据匹配赋值

示例:

为了更加直观,小编做了一个网页展示整体的设计思想: 网页入口(由于没有做手机端适配,请使用电脑端打开)

部分截图如下:

总结

通过后管下发布局文件(json),将本地的数据进行插入,获取到 widget,这个 widget 就是我们要的票据样式,最后将 widget 转换成打印指令,这就是一整套模板动态化设计方案。

小编已将这套映射库开源发布: flutter_json_layout

使用方式简单:

dart 复制代码
DynamicJsonLayout(
      tempJson: '布局的转义json',
      data: '数据映射的转义json',
)

gitHub 可查看使用示例: github.com/liyufengrex...

支持的元素 可查看:flutter-json-layout.web.app/#/

方案细节一直在优化,欢迎大家一起交流进步。

相关推荐
yeziyfx2 小时前
Flutter 宽度充满屏幕的按钮
flutter
里欧跑得慢2 小时前
Flutter 组件 tavily_dart 的适配 鸿蒙Harmony 实战 - 驾驭 AI 搜索引擎集成、实现鸿蒙端互联网知识精密获取与语义增强方案
flutter·harmonyos·鸿蒙·openharmony·tavily_dart
国医中兴4 小时前
Flutter 三方库 pickled_cucumber 的鸿蒙化适配指南 - 玩转 BDD 行为驱动开发、Gherkin 自动化测试实战、鸿蒙级质量守护神
驱动开发·flutter·harmonyos
里欧跑得慢4 小时前
Flutter 三方库 config 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致、透明、多源叠加的命令行参数解析与环境配置文件加载引擎
flutter·harmonyos·鸿蒙·openharmony
左手厨刀右手茼蒿4 小时前
Flutter 三方库 flutter_azure_tts 深度链接鸿蒙全场景智慧语音中枢适配实录:强势加载云端高拟真情感发音合成系统实现零延迟超自然多端协同-适配鸿蒙 HarmonyOS ohos
flutter·harmonyos·azure
雷帝木木4 小时前
Flutter 三方库 image_compare_2 的鸿蒙化适配指南 - 实现像素级的图像分块对比、支持感知哈希(pHash)与端侧视觉差异检测实战
flutter·harmonyos·鸿蒙·openharmony·image_compare_2
王码码20354 小时前
Flutter 三方库 sum_types 的鸿蒙化适配指南 - 引入函数式编程思维,让鸿蒙应用的状态处理更严谨
flutter·harmonyos·鸿蒙·openharmony·sum_types
加农炮手Jinx4 小时前
Flutter 三方库 cli_script 鸿蒙化极简命令行执行引擎适配探索:在多维沙盒终端环境注入异构 Shell 串联逻辑彻底拔高全自动化容器脚本运维及-适配鸿蒙 HarmonyOS ohos
运维·flutter·harmonyos
王码码20354 小时前
Flutter 三方库 simple_rsa 的鸿蒙化适配指南 - 实现非线性 RSA 密钥对生成与端侧文本加解密、支持标准公钥指纹验证与高强度数字签名实战
flutter·harmonyos·鸿蒙·openharmony·simple_rsa