Flutter打印机控制插件rongta_printer的使用

Flutter打印机控制插件rongta_printer的使用

Flutter Version License Platform

A Flutter插件用于使用Rongta热敏打印机打印。 🖨️

特性

  • 打印任何内容 🤯: 可以打印任何形状的控件,绕过了Rongta原生SDK的限制。
  • 了解打印机状态 💡: 接收关于打印机连接和文档传输的状态更新。

安装

pubspec.yaml文件中添加以下依赖:

plugin_name: ^1.0.0

设置

该代码默认适用于Android,并且iOS需要进行一个步骤的设置。

iOS设置

要使插件在iOS上运行,您需要添加蓝牙框架,请按以下步骤操作:

  1. 在左侧导航栏中点击runner。
  2. 从目标列表中选择目标。
  3. 点击构建阶段。
  4. 通过点击加号按钮添加一个新的“与二进制文件链接”。
  5. 在搜索框中输入“Bluetooth”,并选择CoreBluetooth.framework。
alt text

使用

在Dart文件中导入插件:

import 'package:rongta_printer/rongta_printer.dart';
示例

初始化与打印机的连接:

...
final _rongtaPrinterPlugin = RongtaPrinter();

void onConnectionStatusChanged(PrinterConnectionStatus status) {...}
void onOperationStatusChanged(PrinterOperationStatus status) {...}
...
await _rongtaPrinterPlugin.init(
  macAddress: 'DC:0D:30:95:39:A2',
  onPrinterConnectionChange: onConnectionStatusChanged,
  onDocPrinted: onOperationStatusChanged,
);
...

打印您的文档:

...
_rongtaPrinterPlugin.print(
  doc: Column(
    children: const [
      FlutterLogo(),
      Text('Rongta printing example'),
    ],
  ),
);
...

已知问题 ❗️

  • 使用Image.memory不会显示任何内容,因为代码会立即加载图像,而从内存中加载则需要时间。

许可证

该项目根据Apache License 2.0许可发布 - 详情请参阅LICENSE文件。

贡献

欢迎贡献!请随时提交拉取请求。

致谢

代码基于Rongta的Android和iOS SDK构建,可以在这里找到。 🙌


示例代码

import 'dart:developer';

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

import 'package:flutter/services.dart';
import 'package:rongta_printer/core/enums.dart';
import 'package:rongta_printer/rongta_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> {
  PrinterConnectionStatus connectionStatus = PrinterConnectionStatus.initial;
  PrinterOperationStatus operationStatus = PrinterOperationStatus.idle;

  final _rongtaPrinterPlugin = RongtaPrinter();

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

  void onConnectionStatusChanged(PrinterConnectionStatus status) {
    log(connectionStatus.name, name: 'onConnectionStatusChanged');

    setState(() {
      connectionStatus = status;
    });
  }

  void onOperationStatusChanged(PrinterOperationStatus status) {
    log(operationStatus.name, name: 'onOperationStatusChanged');

    setState(() {
      operationStatus = status;
    });
  }

  // 平台消息异步发送,因此我们在异步方法中初始化。
  Future<void> initRongtaPlugin() async {
    try {
      WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
        connectionStatus = PrinterConnectionStatus.loading;

        log(connectionStatus.name, name: 'initRongtaPlugin');

        setState(() {});
      });

      await _rongtaPrinterPlugin.init(
        macAddress: 'DC:0D:30:95:39:A2',
        onPrinterConnectionChange: onConnectionStatusChanged,
        onDocPrinted: onOperationStatusChanged,
      );
    } on PlatformException {
      log(
        '无法初始化Rongta打印机插件',
        name: 'initRongtaPlugin',
      );
    }

    // 如果小部件在异步平台消息发送时从树中移除,则我们希望丢弃回复而不是调用setState来更新不存在的外观。
    if (!mounted) return;
  }

  Widget? connectionStatusWidget() {
    switch (connectionStatus) {
      case PrinterConnectionStatus.initial:
        return null;
      case PrinterConnectionStatus.loading:
        return const CircularProgressIndicator();
      case PrinterConnectionStatus.connected:
        return const Icon(
          Icons.check_circle,
          color: Colors.green,
        );
      case PrinterConnectionStatus.disconnected:
        return const Icon(
          Icons.error,
          color: Colors.red,
        );
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Rongta打印机示例'),
        ),
        body: Column(
          children: [
            ListTile(
              title: const Text('打印机连接状态'),
              subtitle: Text(connectionStatus.name),
              trailing: connectionStatusWidget(),
            ),
            ListTile(
              title: const Text('打印机操作状态'),
              subtitle: Text(operationStatus.name),
            ),
            ElevatedButton(
              onPressed: connectionStatus == PrinterConnectionStatus.connected
                  ? () {
                      _rongtaPrinterPlugin.print(
                        context,
                        doc: const Column(
                          children: [
                            FlutterLogo(),
                            Text('Rongta打印示例'),
                          ],
                        ),
                      );
                    }
                  : null,
              child: const Text('打印测试文档'),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


rongta_printer 是一个用于控制 Rongta 打印机的 Flutter 插件。它允许你通过蓝牙或 USB 连接打印机,并发送打印指令。以下是使用 rongta_printer 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  rongta_printer: ^1.0.0  # 请使用最新版本

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

2. 导入插件

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

import 'package:rongta_printer/rongta_printer.dart';

3. 初始化打印机

在使用打印机之前,你需要初始化打印机连接。你可以通过蓝牙或 USB 连接打印机。

蓝牙连接

RongtaPrinter printer = RongtaPrinter();
await printer.connectBluetooth(deviceAddress);

USB连接

RongtaPrinter printer = RongtaPrinter();
await printer.connectUSB();

4. 发送打印指令

连接成功后,你可以发送打印指令。例如,打印文本:

await printer.printText("Hello, World!");

你也可以打印其他格式的内容,比如图片或二维码:

await printer.printImage(imagePath);
await printer.printQRCode("https://example.com");

5. 断开连接

打印完成后,记得断开打印机连接:

await printer.disconnect();

6. 处理错误

在实际使用中,可能会遇到连接失败、打印失败等问题。你可以使用 try-catch 来捕获并处理这些异常:

try {
  await printer.connectBluetooth(deviceAddress);
  await printer.printText("Hello, World!");
} catch (e) {
  print("Error: $e");
} finally {
  await printer.disconnect();
}

完整示例

以下是一个完整的示例,展示了如何连接打印机并打印文本:

import 'package:flutter/material.dart';
import 'package:rongta_printer/rongta_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> {
  RongtaPrinter printer = RongtaPrinter();
  String deviceAddress = "00:11:22:33:44:55"; // 替换为你的打印机蓝牙地址

  Future<void> printText() async {
    try {
      await printer.connectBluetooth(deviceAddress);
      await printer.printText("Hello, World!");
    } catch (e) {
      print("Error: $e");
    } finally {
      await printer.disconnect();
    }
  }

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