Flutter票据打印机控制插件yjy_drago_pos_printer的使用

Flutter票据打印机控制插件yjy_drago_pos_printer的使用

drago_pos_printer

该插件允许开发者通过ESC/POS协议打印到无线或蓝牙打印机(目前仅支持Android)。此插件提供了列出这些打印机的方法。

示例

蓝牙打印机
_scan() async {
  print("扫描蓝牙打印机");
  setState(() {
    _isLoading = true;
    _printers = [];
  });
  var printers = await BluetoothPrinterManager.discover();
  print(printers);
  setState(() {
    _isLoading = false;
    _printers = printers;
  });
}

_connect(BluetoothPrinter printer) async {
  var paperSize = PaperSize.mm80;
  var profile = await CapabilityProfile.load();
  var manager = BluetoothPrinterManager(printer, paperSize, profile);
  await manager.connect();
  print(" -==== 连接成功 =====- ");
  setState(() {
    _manager = manager;
    printer.connected = true;
  });
}

_startPrinter() async {
  final content = Demo.getShortReceiptContent();
  var bytes = await WebcontentConverter.contentToImage(content: content);
  var service = ESCPrinterService(bytes);
  var data = await service.getBytes(paperSize: PaperSize.mm58);
  if (_manager != null) {
    print("是否已连接 ${_manager.isConnected}");
    _manager.writeBytes(data, isDisconnect: false);
  }
}
网络打印机
_scan() async {
  setState(() {
    _isLoading = true;
    _printers = [];
  });
  var printers = await NetworkPrinterManager.discover();
  setState(() {
    _isLoading = false;
    _printers = printers;
  });
}

_connect(NetWorkPrinter printer) async {
  var paperSize = PaperSize.mm80;
  var profile = await CapabilityProfile.load();
  var manager = NetworkPrinterManager(printer, paperSize, profile);
  await manager.connect();
  setState(() {
    _manager = manager;
    printer.connected = true;
  });
}

_startPrinter() async {
  if (_data.isEmpty) {
    final content = Demo.getShortReceiptContent();
    var bytes = await WebcontentConverter.contentToImage(
      content: content,
      executablePath: WebViewHelper.executablePath(),
    );
    var service = ESCPrinterService(bytes);
    var data = await service.getBytes();
    if (mounted) setState(() => _data = data);
  }

  if (_manager != null) {
    print("是否已连接 ${_manager.isConnected}");
    _manager.writeBytes(_data, isDisconnect: false);
  }
}
USB打印机
_scan() async {
  setState(() {
    _isLoading = true;
    _printers = [];
  });
  var printers = await USBPrinterManager.discover();
  setState(() {
    _isLoading = false;
    _printers = printers;
  });
}

_connect(USBPrinter printer) async {
  var paperSize = PaperSize.mm80;
  var profile = await CapabilityProfile.load();
  var manager = USBPrinterManager(printer, paperSize, profile);
  await manager.connect();
  setState(() {
    _manager = manager;
    printer.connected = true;
  });
}

_startPrinter() async {
  if (_data.isEmpty) {
    final content = Demo.getShortReceiptContent();
    var bytes = await WebcontentConverter.contentToImage(
      content: content,
      executablePath: WebViewHelper.executablePath(),
    );
    var service = ESCPrinterService(bytes);
    var data = await service.getBytes();
    if (mounted) setState(() => _data = data);
  }

  if (_manager != null) {
    print("是否已连接 ${_manager.isConnected}");
    _manager.writeBytes(_data, isDisconnect: false);
  }
}

支持的设备

设备 网络 蓝牙 USB
Android
IOS
Macos
Windows
Linux

注:USB功能将在下一个版本更新中实现。

开始使用

pubspec.yaml 文件中添加依赖:

flutter pub add yjy_drago_pos_printer

感谢以下插件的贡献:

完整示例Demo

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:yjy_drago_pos_printer/drago_pos_printer.dart';

import 'home_screen.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  /// 确保打印机配置文件已加载
  await CapabilityProfile.ensureProfileLoaded();
  print("确保加载完成");
  runApp(MyApp());
}

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

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(home: HomeScreen());
  }
}

example/lib/home_screen.dart

import 'package:flutter/material.dart';
import 'package:yjy_drago_pos_printer/drago_pos_printer.dart';

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

class _HomeScreenState extends State<HomeScreen> {
  bool _isLoading = false;
  List<dynamic> _printers = [];
  BluetoothPrinterManager? _manager;

  void _scan() async {
    print("扫描蓝牙打印机");
    setState(() {
      _isLoading = true;
      _printers = [];
    });
    var printers = await BluetoothPrinterManager.discover();
    print(printers);
    setState(() {
      _isLoading = false;
      _printers = printers;
    });
  }

  void _connect(BluetoothPrinter printer) async {
    var paperSize = PaperSize.mm80;
    var profile = await CapabilityProfile.load();
    var manager = BluetoothPrinterManager(printer, paperSize, profile);
    await manager.connect();
    print(" -==== 连接成功 =====- ");
    setState(() {
      _manager = manager;
      printer.connected = true;
    });
  }

  void _startPrinter() async {
    final content = Demo.getShortReceiptContent();
    var bytes = await WebcontentConverter.contentToImage(content: content);
    var service = ESCPrinterService(bytes);
    var data = await service.getBytes(paperSize: PaperSize.mm58);
    if (_manager != null) {
      print("是否已连接 ${_manager.isConnected}");
      _manager.writeBytes(data, isDisconnect: false);
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('票据打印机控制')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: _scan,
              child: Text('扫描打印机'),
            ),
            ListView.builder(
              shrinkWrap: true,
              itemCount: _printers.length,
              itemBuilder: (context, index) {
                return ListTile(
                  title: Text(_printers[index].name),
                  subtitle: Text(_printers[index].address),
                  trailing: ElevatedButton(
                    onPressed: () => _connect(_printers[index]),
                    child: Text('连接'),
                  ),
                );
              },
            ),
            ElevatedButton(
              onPressed: _startPrinter,
              child: Text('开始打印'),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter票据打印机控制插件yjy_drago_pos_printer的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


yjy_drago_pos_printer 是一个用于控制票据打印机的Flutter插件。它允许你在Flutter应用程序中与POS打印机进行通信,并发送打印任务。以下是如何使用该插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  yjy_drago_pos_printer: ^版本号

请将 ^版本号 替换为最新的插件版本号。

2. 导入插件

在你的Dart文件中导入插件:

import 'package:yjy_drago_pos_printer/yjy_drago_pos_printer.dart';

3. 初始化打印机

在使用打印机之前,需要先初始化打印机。你可以使用 PrinterManager 类来进行初始化:

PrinterManager printerManager = PrinterManager();

4. 连接打印机

你可以通过蓝牙、Wi-Fi或USB连接到打印机。以下是使用蓝牙连接的示例:

printerManager.connectBluetooth(bluetoothAddress);

bluetoothAddress 是蓝牙设备的地址。

5. 打印文本

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

printerManager.printText("Hello, World!");

6. 打印图片

你也可以打印图片。首先,将图片转换为字节数组,然后发送打印任务:

Uint8List imageBytes = await _loadImageBytes("assets/image.png");
printerManager.printImage(imageBytes);

7. 断开连接

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

printerManager.disconnect();

8. 错误处理

在使用插件时,你可能会遇到各种错误。确保你处理了这些错误:

try {
  await printerManager.connectBluetooth(bluetoothAddress);
} catch (e) {
  print("Failed to connect: $e");
}

9. 示例代码

以下是一个完整的示例代码,展示了如何使用 yjy_drago_pos_printer 插件:

import 'package:flutter/material.dart';
import 'package:yjy_drago_pos_printer/yjy_drago_pos_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> {
  PrinterManager printerManager = PrinterManager();
  String bluetoothAddress = "00:11:22:33:44:55"; // 替换为你的蓝牙地址

  Future<void> printReceipt() async {
    try {
      await printerManager.connectBluetooth(bluetoothAddress);
      await printerManager.printText("Hello, World!");
      await printerManager.printText("Thank you for your purchase!");
      await printerManager.disconnect();
    } catch (e) {
      print("Failed to print: $e");
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("POS Printer Example"),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: printReceipt,
          child: Text("Print Receipt"),
        ),
      ),
    );
  }
}
回到顶部