Flutter安卓USB打印机插件yjy_android_usb_printer的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter安卓USB打印机插件yjy_android_usb_printer的使用

flutter plugin

android_usb_printer

flutter android 端插件,提供操作 usb 打印机方法能力


使用方法

  1. pubspec.yaml文件中添加依赖:

    dependencies:
      android_usb_printer: ^0.0.1
  2. 初始化并查询本地打印机设备:

    import 'package:flutter/services.dart';
    import 'package:yjy_android_usb_printer/android_usb_printer.dart';
    
    void main() {
      runApp(const MyApp());
    }
    
    class MyApp extends StatefulWidget {
      const MyApp({super.key});
    
      [@override](/user/override)
      State<MyApp> createState() => _MyAppState();
    }
    
    class _MyAppState extends State<MyApp> {
      String _platformVersion = 'Unknown';
      final _androidUsbPrinterPlugin = AndroidUsbPrinterPlatform.instance;
    
      [@override](/user/override)
      void initState() {
        super.initState();
        initPlatformState();
      }
    
      // 查询本地打印机设备
      Future<void> initPlatformState() async {
        String platformVersion;
        try {
          platformVersion = await _androidUsbPrinterPlugin
              .queryLocalUsbDevice()
              .then((value) => value.map((e) => e.toMap()).toList().toString()) ??
              'Unknown platform version';
        } on PlatformException {
          platformVersion = 'Failed to get platform version.';
        }
    
        if (!mounted) return;
    
        setState(() {
          _platformVersion = platformVersion;
        });
      }
    
      [@override](/user/override)
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            appBar: AppBar(
              title: const Text('Plugin example app'),
            ),
            body: Center(
              child: Text('Running on: $_platformVersion\n'),
            ),
          ),
        );
      }
    }
  3. 打印字节数组:

    // 假设已获取到打印机设备信息和要打印的数据
    final usbDeviceInfo = UsbDeviceInfo(vendorId: 1234, productId: 5678, serialNumber: 'serial123');
    final bytesToPrint = [/* 要打印的数据 */];
    
    // 发送打印字节数组
    _androidUsbPrinterPlugin.writeBytes(usbDeviceInfo, bytesToPrint);

提供API方法

以下是插件提供的API方法及详细说明:

/// 获取本地打印机列表
Future<List<UsbDeviceInfo>> queryLocalUsbDevice()

/// 打印机发送字节数据
/// @param singleLimit, 单次最大传输字节长度,内部会将 bytes 按照 singleLimit 阈值进行切割分组后依次 write
Future<int> writeBytes(UsbDeviceInfo usbDeviceInfo, List<int> bytes, {int singleLimit = -1})

/// 接收打印机字节数据
/// @param timeOut, timeOut毫秒内无接收数据直接返回null
Future<Uint8List?> readBytes(UsbDeviceInfo usbDeviceInfo, {int timeOut = 2000})

/// 获取打印机连接状态
Future<bool> checkDeviceConn(UsbDeviceInfo usbDeviceInfo)

/// 打印机连接
Future<bool> connect(UsbDeviceInfo usbDeviceInfo)

/// 打印机断开连接
Future<bool> disconnect(UsbDeviceInfo usbDeviceInfo)

/// 获取打印机设备权限
Future<bool> checkDevicePermission(UsbDeviceInfo usbDeviceInfo)

/// 申请打印机设备权限
Future<bool> requestDevicePermission(UsbDeviceInfo usbDeviceInfo)

/// 删除原生层中 usb conn 缓存(删除设备时可调用)
Future<dynamic> removeUsbConnCache(UsbDeviceInfo usbDeviceInfo)

提供监听 USB 插拔,USB 设备授权能力

可以通过监听 USB 插拔事件和设备授权状态来动态管理设备连接:

// 监听 USB 插拔,USB 设备授权
AndroidUsbPrinterPlatform.instance.usbPlugInfoStream.listen((usbPlugInfo) {
  final usbDeviceInfo = usbPlugInfo.usbDevice; // 插入的 USB 设备信息(vId, pId, sId)
  final plug = usbPlugInfo.plug; // 消息类型枚举(包含状态:拔出、插入、授权成功)
});

UsbPlugInfo 结构如下:

class UsbPlugInfo {
  final UsbPlugInfoEnum plug;
  final UsbDeviceInfo usbDevice;

  UsbPlugInfo(this.usbDevice, this.plug);
}

enum UsbPlugInfoEnum {
  attached, // 插入
  detached, // 拔出
  granted, // 授权成功
}

完整示例代码

以下是完整的示例代码,展示如何初始化、查询设备并打印数据:

import 'package:flutter/material.dart';
import 'dart:async';

import 'package:flutter/services.dart';
import 'package:yjy_android_usb_printer/android_usb_printer.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  final _androidUsbPrinterPlugin = AndroidUsbPrinterPlatform.instance;

  [@override](/user/override)
  void initState() {
    super.initState();
    initPlatformState();
  }

  // 查询本地打印机设备
  Future<void> initPlatformState() async {
    String platformVersion;
    try {
      final devices = await _androidUsbPrinterPlugin.queryLocalUsbDevice();
      platformVersion = devices.map((e) => e.toMap()).toList().toString();
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }

    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('USB Printer Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
            Text('Running on: $_platformVersion\n'),
            ElevatedButton(
              onPressed: () async {
                // 假设已获取到打印机设备信息和要打印的数据
                final usbDeviceInfo = UsbDeviceInfo(vendorId: 1234, productId: 5678, serialNumber: 'serial123');
                final bytesToPrint = [/* 要打印的数据 */];
                await _androidUsbPrinterPlugin.writeBytes(usbDeviceInfo, bytesToPrint);
              },
              child: Text('Print Data'),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


yjy_android_usb_printer 是一个用于在 Flutter 应用中与 Android USB 打印机进行通信的插件。它允许开发者通过 USB 接口连接并控制打印机,发送打印任务。以下是如何使用该插件的基本步骤和示例代码。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 yjy_android_usb_printer 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  yjy_android_usb_printer: ^1.0.0  # 请确保使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 配置 Android 项目

确保你的 Android 项目已经配置了 USB 权限。在 AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.USB_PERMISSION" />

3. 初始化插件

在你的 Dart 代码中,首先导入插件并初始化它:

import 'package:yjy_android_usb_printer/yjy_android_usb_printer.dart';

final printer = YjyAndroidUsbPrinter();

4. 查找并连接打印机

你可以使用以下代码来查找可用的 USB 打印机并连接:

Future<void> connectPrinter() async {
  List<UsbDevice> devices = await printer.getUsbDevices();
  if (devices.isNotEmpty) {
    UsbDevice device = devices.first;
    bool connected = await printer.connect(device);
    if (connected) {
      print("Printer connected successfully!");
    } else {
      print("Failed to connect to printer.");
    }
  } else {
    print("No USB printers found.");
  }
}

5. 发送打印任务

连接成功后,你可以发送打印任务。以下是一个简单的示例,发送文本到打印机:

Future<void> printText() async {
  String text = "Hello, USB Printer!";
  bool success = await printer.printText(text);
  if (success) {
    print("Text printed successfully!");
  } else {
    print("Failed to print text.");
  }
}

6. 断开连接

完成打印任务后,记得断开与打印机的连接:

Future<void> disconnectPrinter() async {
  bool disconnected = await printer.disconnect();
  if (disconnected) {
    print("Printer disconnected successfully!");
  } else {
    print("Failed to disconnect printer.");
  }
}

7. 处理异常

在实际使用中,你可能会遇到各种异常情况(如未找到设备、连接失败等),建议使用 try-catch 块来处理这些异常:

try {
  await connectPrinter();
  await printText();
  await disconnectPrinter();
} catch (e) {
  print("An error occurred: $e");
}

8. 完整示例

以下是一个完整的示例代码,展示了如何使用 yjy_android_usb_printer 插件进行打印:

import 'package:flutter/material.dart';
import 'package:yjy_android_usb_printer/yjy_android_usb_printer.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: PrinterScreen(),
    );
  }
}

class PrinterScreen extends StatefulWidget {
  [@override](/user/override)
  _PrinterScreenState createState() => _PrinterScreenState();
}

class _PrinterScreenState extends State<PrinterScreen> {
  final printer = YjyAndroidUsbPrinter();

  Future<void> connectPrinter() async {
    List<UsbDevice> devices = await printer.getUsbDevices();
    if (devices.isNotEmpty) {
      UsbDevice device = devices.first;
      bool connected = await printer.connect(device);
      if (connected) {
        print("Printer connected successfully!");
      } else {
        print("Failed to connect to printer.");
      }
    } else {
      print("No USB printers found.");
    }
  }

  Future<void> printText() async {
    String text = "Hello, USB Printer!";
    bool success = await printer.printText(text);
    if (success) {
      print("Text printed successfully!");
    } else {
      print("Failed to print text.");
    }
  }

  Future<void> disconnectPrinter() async {
    bool disconnected = await printer.disconnect();
    if (disconnected) {
      print("Printer disconnected successfully!");
    } else {
      print("Failed to disconnect printer.");
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('USB Printer Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: connectPrinter,
              child: Text('Connect Printer'),
            ),
            ElevatedButton(
              onPressed: printText,
              child: Text('Print Text'),
            ),
            ElevatedButton(
              onPressed: disconnectPrinter,
              child: Text('Disconnect Printer'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!