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

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

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

Brother 打印机 SDK 用于 Flutter 应用,基于原生 SDK v4。

安装

确保阅读原生 SDK 的要求: https://support.brother.com/g/s/es/htmldoc/mobilesdk/

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

dependencies:
  brother_printer: ^0.2.0

iOS

Podfile 中取消注释以下行:

platform :ios, '13.0'

Info.plist 文件中添加以下内容:

<key>NSBluetoothAlwaysUsageDescription</key>
<string>蓝牙是连接打印机所必需的。</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>蓝牙是连接打印机所必需的。</string>
<key>NSLocalNetworkUsageDescription</key>
<string>${PRODUCT_NAME} 使用本地网络来发现您的网络上的打印机。</string>
<key>UISupportedExternalAccessoryProtocols</key>
<array>
    <string>com.brother.ptcbp</string>
</array>
<key>NSBonjourServices</key>
<array>
    <string>_printer._tcp</string>
    <string>_pdl-datastream._tcp</string>
    <string>_ipp._tcp</string>
</array>

Android

连接似乎在模拟器上不起作用。

AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

<uses-permission
    android:name="android.permission.BLUETOOTH_SCAN"
    android:usesPermissionFlags="neverForLocation"
    tools:targetApi="s" />

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

你必须手动授权位置权限(稍后会改进)。

警告

在发布模式下可能会出现崩溃,可以在 android/app/build.gradle 文件中添加以下内容以解决:

buildTypes {
    release {
        minifyEnabled false
        shrinkResources false

        signingConfig signingConfigs.release
    }
}

注意事项

iOS 和 Android 版本返回的信息有所不同:

print('${device.model.nameAndroid} - ${device.source} - ${device.modelName} - ${device.ipAddress} - ${device.printerName} - ${device.macAddress} - ${device.nodeName} - ${device.serialNumber} - ${device.bleAdvertiseLocalName}');

iOS 输出

QL-820NWB - BrotherDeviceSource.network - Brother QL-820NWB - 10.0.0.1 - Brother QL-820NWB - b0:68:e6:97:db:42 - BRWB068E697DB42 - K9Z195606 - null
QL-820NWB - BrotherDeviceSource.bluetooth - QL-820NWB - null - QL-820NWB5606 - null - null - 806FB0BABE7C - null

Android 输出

QL-820NWB - BrotherDeviceSource.network - Brother QL-820NWB - 10.0.0.1 - null - B0:68:E6:97:DB:42 - BRWB068E697DB42 - null - null
QL-820NWB - BrotherDeviceSource.bluetooth - null - null - QL-820NWB5606 - 80:6F:B0:BA:BE:7D - null - null - null

网络信息modelName, ipAddress, printerName, network macAddress, nodeName, serialNumber 蓝牙信息modelName, printerName, bluetooth macAddress

示例代码

下面是一个简单的示例,展示如何使用 brother_printer 插件进行基本的初始化和平台版本检查。

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

import 'package:flutter/services.dart';
import 'package:brother_printer/brother_printer.dart';

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

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

class _MyAppState extends State<MyApp> {
  String? _platformVersion = 'Unknown';

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

  // 平台消息是异步的,所以我们在一个异步方法中初始化。
  Future<void> initPlatformState() async {
    String? platformVersion;
    // 平台消息可能失败,所以我们使用一个带有 PlatformException 的 try/catch。
    // 我们也处理消息可能返回 null 的情况。
    try {
      // platformVersion = await BrotherPrinter.platformVersion ?? 'Unknown platform version';
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Center(
          child: Text('运行在: $_platformVersion\n'),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter应用中使用brother_printer插件来控制Brother打印机的代码示例。请注意,brother_printer插件的具体实现和功能可能会随着插件的更新而有所变化,因此请参考最新的插件文档以确保代码的正确性。

首先,确保你已经在pubspec.yaml文件中添加了brother_printer依赖:

dependencies:
  flutter:
    sdk: flutter
  brother_printer: ^最新版本号  # 替换为实际的最新版本号

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

接下来,在你的Flutter应用中,你可以按照以下步骤使用brother_printer插件:

  1. 导入插件

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

import 'package:brother_printer/brother_printer.dart';
  1. 初始化插件并打印

下面是一个简单的示例,展示如何初始化插件并发送打印任务:

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Brother Printer Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 初始化BrotherPrinter实例
              final BrotherPrinter printer = BrotherPrinter();

              // 配置打印机设置(例如,打印机地址、型号等)
              // 注意:这里的设置需要根据你的实际打印机配置进行调整
              final Map<String, dynamic> printerSettings = {
                'printerAddress': '你的打印机IP地址', // 替换为你的打印机IP地址
                'printerModel': '你的打印机型号',    // 替换为你的打印机型号
                // 其他可能的设置...
              };

              // 设置打印数据
              final String printData = "Hello, Brother Printer!";

              try {
                // 发送打印任务
                await printer.printText(printData, printerSettings);
                print("打印任务已发送!");
              } catch (e) {
                print("打印失败: $e");
              }
            },
            child: Text('打印'),
          ),
        ),
      ),
    );
  }
}

注意

  • printerAddressprinterModel等设置需要根据你的实际打印机配置进行调整。
  • printText方法是一个假设的方法,用于演示如何发送打印任务。实际使用时,你需要参考brother_printer插件的文档来确定正确的方法和参数。
  • 由于brother_printer插件的具体API可能会随着版本更新而变化,因此务必查阅最新的插件文档以获取准确的信息。
  1. 处理错误和响应

在实际应用中,你可能需要更详细地处理错误和响应,例如显示用户友好的错误消息或处理打印任务的完成情况。

希望这个示例能帮助你开始在Flutter应用中使用brother_printer插件来控制Brother打印机。如果你遇到任何问题或需要进一步的帮助,请查阅插件的官方文档或寻求社区的支持。

回到顶部