Flutter条码打印插件argox的使用

Flutter条码打印插件argox的使用

简介

argox 是一个基于 Flutter FFI(Foreign Function Interface)的插件项目,用于调用本地代码实现条码打印功能。本文将介绍如何在 Flutter 中使用 argox 插件进行条码打印。


使用步骤

1. 创建 Flutter 项目

首先创建一个新的 Flutter 项目:

flutter create argox_example

2. 添加依赖

在项目的 pubspec.yaml 文件中添加 argox 插件依赖。例如:

dependencies:
  flutter:
    sdk: flutter
  ffi: ^2.0.0

然后运行以下命令安装依赖:

flutter pub get

3. 配置本地库路径

确保 argox 的本地库文件(如 Winppla.dll 或其他平台对应的动态库)已正确放置在项目中,并配置其路径。


4. 编写 Dart 代码

导入必要的库

lib/main.dart 中导入 dart:ffipackage:ffi/ffi.dart

import 'dart:ffi';
import 'package:ffi/ffi.dart';

加载本地库

加载 argox 动态库:

final dylib = DynamicLibrary.open('Winppla.dll');

声明函数指针

声明并绑定所有需要调用的本地函数:

typedef A_Get_DLL_VersionAFunc = Int32 Function(Int32 nShowMessage);
typedef A_Get_DLL_VersionA = int Function(int nShowMessage);

// 定义更多函数类型...
final getDllVersionPointer =
    dylib.lookup<NativeFunction<A_Get_DLL_VersionAFunc>>('A_Get_DLL_VersionA');
final getDllVersion = getDllVersionPointer.asFunction<A_Get_DLL_VersionA>();

调用本地函数

编写逻辑调用这些函数,例如获取版本信息、设置打印机参数等:

void testPrint() async {
  String info = '';

  // 获取 DLL 版本
  info += '\nGET VERSION: ${getDllVersion(0)}';

  // 获取 USB 缓冲区长度
  final int nLen = getUsbBufferLen() + 1;
  info += '\nUSB BUFFER LENGTH: $nLen';

  if (nLen > 1) {
    // 枚举 USB 打印机
    final pbuf = ''.padLeft(128).toNativeUtf8();
    final result = enumUsb(pbuf);
    info += '\nEnumUSB: $result';
    info += '\npBuf: ${pbuf.toDartString()}';

    // 获取 USB 设备信息
    final len1 = calloc<Int32>();
    len1.value = 128;
    final buf1 = ''.padLeft(len1.value).toNativeUtf8();
    final len2 = calloc<Int32>();
    len2.value = 128;
    final buf2 = ''.padLeft(len2.value).toNativeUtf8();
    final getUsbDeviceInfoResult = getUsbDeviceInfo(1, buf1, len1, buf2, len2);
    info += '\nA_GetUSBDeviceInfo';
    info += '\nreturn: $getUsbDeviceInfoResult';
    info += '\nlen1: ${len1.value}';
    info += '\nbuf1: ${buf1.toDartString()}';
    info += '\nlen2: ${len2.value}';
    info += '\nbuf2: ${buf2.toDartString()}';

    // 打开打印机
    final sw = true;
    int ret;
    if (sw) {
      ret = createPrn(12, buf2);
    } else {
      ret = createUsbPort(1);
    }

    if (ret != 0) {
      info += '\n\nError #$ret when opening USB port!';
    } else {
      info += '\nOpening USB:';
      info += '\nDevice name: ${buf1.toDartString()}';
      info += '\nDevice path: ${buf2.toDartString()}';

      // 打印文本和条码
      setDebugDialog(1);
      setUnit('m'.codeUnitAt(0));
      clearMemory();
      prnText(10, 10, 1, 2, 0, 1, 1, 'N'.codeUnitAt(0), 2, 'Hello World!'.toNativeUtf8());
      prnBarcode(10, 40, 1, 'A'.codeUnitAt(0), 0, 0, 20, 'B'.codeUnitAt(0), 1, '12345'.toNativeUtf8());

      // 输出打印任务
      printOut(1, 1, 2, 1);
    }

    // 关闭打印机
    closePrn();
  } else {
    print('\nUSB Printer not found!');
  }
}

5. 运行应用

在主程序中调用 testPrint() 方法:

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Argox BarCode Printer')),
        body: Center(
          child: ElevatedButton(
            onPressed: testPrint,
            child: const Text('Test Print'),
          ),
        ),
      ),
    );
  }
}
1 回复

更多关于Flutter条码打印插件argox的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中使用Argox条码打印机进行打印,通常需要通过插件与打印机进行通信。虽然Flutter社区中没有直接支持Argox打印机的官方插件,但你可以通过以下步骤实现条码打印功能:

1. 使用 esc_pos_utils 插件

esc_pos_utils 是一个用于生成ESC/POS指令的Flutter插件,它可以帮助你生成打印指令,然后通过蓝牙、Wi-Fi或USB发送到打印机。

安装插件

pubspec.yaml 中添加依赖:

dependencies:
  esc_pos_utils: ^1.0.0

生成打印指令

你可以使用 esc_pos_utils 生成条码打印指令。以下是一个简单的示例:

import 'package:esc_pos_utils/esc_pos_utils.dart';

void printBarcode() {
  final generator = Generator(PaperSize.mm80, await CapabilityProfile.load());
  final List<int> bytes = [];

  // 添加文本
  bytes += generator.text('Hello, Argox Printer!');

  // 添加条码
  bytes += generator.barcode(Barcode.code128('123456789012'));

  // 切纸
  bytes += generator.cut();

  // 发送打印指令到打印机
  // 这里你需要根据你的连接方式(蓝牙、Wi-Fi、USB)发送bytes到打印机
}

2. 使用 flutter_blue 插件进行蓝牙连接

如果你的Argox打印机支持蓝牙连接,你可以使用 flutter_blue 插件与打印机进行通信。

安装插件

pubspec.yaml 中添加依赖:

dependencies:
  flutter_blue: ^0.8.0

连接打印机并发送数据

以下是一个简单的示例,展示如何通过蓝牙连接打印机并发送打印指令:

import 'package:flutter_blue/flutter_blue.dart';
import 'package:esc_pos_utils/esc_pos_utils.dart';

void connectAndPrint() async {
  FlutterBlue flutterBlue = FlutterBlue.instance;

  // 扫描设备
  flutterBlue.startScan(timeout: Duration(seconds: 4));

  // 监听扫描结果
  flutterBlue.scanResults.listen((results) {
    for (ScanResult result in results) {
      if (result.device.name == 'Argox Printer') {
        // 停止扫描
        flutterBlue.stopScan();

        // 连接设备
        result.device.connect();

        // 发现服务
        result.device.discoverServices().then((services) {
          for (BluetoothService service in services) {
            if (service.uuid.toString() == '000018f0-0000-1000-8000-00805f9b34fb') {
              for (BluetoothCharacteristic characteristic in service.characteristics) {
                if (characteristic.uuid.toString() == '00002af1-0000-1000-8000-00805f9b34fb') {
                  // 生成打印指令
                  final generator = Generator(PaperSize.mm80, await CapabilityProfile.load());
                  final List<int> bytes = [];
                  bytes += generator.text('Hello, Argox Printer!');
                  bytes += generator.barcode(Barcode.code128('123456789012'));
                  bytes += generator.cut();

                  // 发送打印指令
                  characteristic.write(bytes);
                }
              }
            }
          }
        });
      }
    }
  });
}

3. 使用 flutter_usb_printer 插件进行USB连接

如果你的Argox打印机支持USB连接,你可以使用 flutter_usb_printer 插件与打印机进行通信。

安装插件

pubspec.yaml 中添加依赖:

dependencies:
  flutter_usb_printer: ^0.1.0

连接打印机并发送数据

以下是一个简单的示例,展示如何通过USB连接打印机并发送打印指令:

import 'package:flutter_usb_printer/flutter_usb_printer.dart';
import 'package:esc_pos_utils/esc_pos_utils.dart';

void connectAndPrint() async {
  FlutterUsbPrinter flutterUsbPrinter = FlutterUsbPrinter();

  // 获取USB设备列表
  List<UsbDevice> devices = await flutterUsbPrinter.getUSBDeviceList();

  // 查找Argox打印机
  UsbDevice? argoxPrinter;
  for (UsbDevice device in devices) {
    if (device.productName == 'Argox Printer') {
      argoxPrinter = device;
      break;
    }
  }

  if (argoxPrinter != null) {
    // 连接打印机
    await flutterUsbPrinter.connect(argoxPrinter);

    // 生成打印指令
    final generator = Generator(PaperSize.mm80, await CapabilityProfile.load());
    final List<int> bytes = [];
    bytes += generator.text('Hello, Argox Printer!');
    bytes += generator.barcode(Barcode.code128('123456789012'));
    bytes += generator.cut();

    // 发送打印指令
    await flutterUsbPrinter.write(bytes);
  }
}

4. 使用 network_info_plus 插件进行Wi-Fi连接

如果你的Argox打印机支持Wi-Fi连接,你可以通过TCP/IP协议与打印机进行通信。

安装插件

pubspec.yaml 中添加依赖:

dependencies:
  network_info_plus: ^2.0.0

连接打印机并发送数据

以下是一个简单的示例,展示如何通过Wi-Fi连接打印机并发送打印指令:

import 'package:network_info_plus/network_info_plus.dart';
import 'package:esc_pos_utils/esc_pos_utils.dart';
import 'dart:io';

void connectAndPrint() async {
  NetworkInfo networkInfo = NetworkInfo();

  // 获取Wi-Fi IP地址
  String? wifiIP = await networkInfo.getWifiIP();

  if (wifiIP != null) {
    // 连接到打印机
    Socket socket = await Socket.connect('192.168.1.100', 9100);

    // 生成打印指令
    final generator = Generator(PaperSize.mm80, await CapabilityProfile.load());
    final List<int> bytes = [];
    bytes += generator.text('Hello, Argox Printer!');
    bytes += generator.barcode(Barcode.code128('123456789012'));
    bytes += generator.cut();

    // 发送打印指令
    socket.add(bytes);
    await socket.flush();
    await socket.close();
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!