Flutter集成Zebra设备插件flutter_zebra_sdk的使用

Flutter集成Zebra设备插件flutter_zebra_sdk的使用

Getting Started

import 'package:flutter_zebra_sdk/flutter_zebra_sdk.dart';

Android

根据你的打印机需求,需要以下权限:

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

Work in progress

  • ✅ 发送ZPL数据通过TCP/IP
  • ✅ 发送ZPL数据通过蓝牙®无需配对
  • ❌ 发送CPCL数据通过TCP/IP
  • ❌ 发送CPCL数据通过蓝牙®无需配对

完整示例代码

以下是一个完整的示例代码,展示了如何使用flutter_zebra_sdk插件来与Zebra打印机进行通信。

import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'dart:async';
// import 'package:flutter/services.dart';
import 'package:flutter_zebra_sdk/flutter_zebra_sdk.dart';

void main() {
  runApp(MaterialApp(home: MyApp()));
}

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

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  void initState() {
    super.initState();
    initial();
  }

  void initial() async {
    // await Permission.
  }

  Future _ackAlert(BuildContext context, String title) async {
    return showDialog(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          title: Text(title),
          // content: const Text('This item is no longer available'),
          actions: [
            TextButton(
              child: Text('Ok'),
              onPressed: () {
                Navigator.of(context).pop();
              },
            ),
          ],
        );
      },
    );
  }

  Future<void> onDiscovery() async {
    var a = await ZebraSdk.onDiscovery();
    print(a);
    var b = json.decode(a);

    var printers = b['content'];
    if (printers != null) {
      var printObj = json.decode(printers);
      print(printObj);
    }

    print(b);
  }

  Future<void> onDiscoveryUSB(dynamic context) async {
    var a = await ZebraSdk.onDiscoveryUSB();
    _ackAlert(context, 'USB $a');
    print(a);
    var b = json.decode(a);

    var printers = b['content'];
    if (printers != null) {
      var printObj = json.decode(printers);
      print(printObj);
    }
    print(b);
  }

  Future<void> onGetIPInfo() async {
    var a = await ZebraSdk.onGetPrinterInfo('192.168.1.26');
    print(a);
  }

  Future<void> onTestConnect() async {
    var a = await ZebraSdk.isPrinterConnected('192.168.1.26');
    print(a);
    var b = json.decode(a);
    print(b);
  }

  Future<void> onTestTCP() async {
    String data;
    data = '''
    ''
    ^XA~TA000~JSN^LT0^MNW^MTT^PON^PMN^LH0,0^JMA^PR6,6~SD15^JUS^LRN^CI0^XZ
    ^XA
    ^MMT
    ^PW500
    ^LL0240
    ^LS0
    ^FT144,33^A0N,25,24^FB111,1,0,C^FH\^FDITEM TITLE^FS
    ^FT3,61^A@N,20,20,TT0003M_^FB394,1,0,C^FH\^CI17^F8^FDOption 1, Option 2, Option 3, Option 4, Opt^FS^CI0
    ^FT3,84^A@N,20,20,TT0003M_^FB394,1,0,C^FH\^CI17^F8^FDion 5, Option 6 ^FS^CI0
    ^FT34,138^A@N,25,24,TT0003M_^FB331,1,0,C^FH\^CI17^F8^FDOrder: https://eat.chat/phobac^FS^CI0
    ^FT29,173^A@N,20,20,TT0003M_^FB342,1,0,C^FH\^CI17^F8^FDPromotional Promotional Promotional^FS^CI0
    ^FT29,193^A@N,20,20,TT0003M_^FB342,1,0,C^FH\^CI17^F8^FD Promotional Promotional ^FS^CI0
    ^FT106,233^A0N,25,24^FB188,1,0,C^FH\^FDPHO BAC HOA VIET^FS
    ^PQ1,0,1,Y^XZ
        ''';

    final rep = ZebraSdk.printZPLOverTCPIP('192.168.1.26', data: data);
    print(rep);
  }

  Future<void> onTestBluetooth() async {
    String data;
    data = '''
    ''
    ^XA~TA000~JSN^LT0^MNW^MTT^PON^PMN^LH0,0^JMA^PR6,6~SD15^JUS^LRN^CI0^XZ
    ^XA
    ^MMC
    ^PW500
    ^LL0240
    ^LS0
    ^FT144,33^A0N,25,24^FB111,1,0,C^FH\^FDITEM TITLE^FS
    ^FT3,61^A@N,20,20,TT0003M_^FB394,1,0,C^FH\^CI17^F8^FDOption 1, Option 2, Option 3, Option 4, Opt^FS^CI0
    ^FT3,84^A@N,20,20,TT0003M_^FB394,1,0,C^FH\^CI17^F8^FDion 5, Option 6 ^FS^CI0
    ^FT34,138^A@N,25,24,TT0003M_^FB331,1,0,C^FH\^CI17^F8^FDOrder: https://eat.chat/phobac^FS^CI0
    ^FT29,173^A@N,20,20,TT0003M_^FB342,1,0,C^FH\^CI17^F8^FDPromotional Promotional Promotional^FS^CI0
    ^FT29,193^A@N,20,20,TT0003M_^FB342,1,0,C^FH\^CI17^F8^FD Promotional Promotional ^FS^CI0
    ^FT106,233^A0N,25,24^FB188,1,0,C^FH\^FDPHO BAC HOA VIET^FS
    ^PQ1,0,1,Y^XZ
        ''';

    String arr = '50:8C:B1:8D:10:C7';
    if (Platform.isIOS) {
      arr = '50J171201608';
    }
    final rep = ZebraSdk.printZPLOverBluetooth(arr, data: data);
    print(rep);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(20.0),
          child: Center(
            child: Column(
              children: [
                TextButton(
                    onPressed: onGetIPInfo, child: Text('获取打印机信息')),
                TextButton(
                    onPressed: onTestConnect, child: Text('测试连接')),
                TextButton(onPressed: onDiscovery, child: Text('发现打印机')),
                TextButton(
                    onPressed: () => onDiscoveryUSB(context),
                    child: Text('发现USB打印机')),
                TextButton(onPressed: onTestTCP, child: Text('通过TCP打印')),
                TextButton(
                    onPressed: onTestBluetooth, child: Text('通过蓝牙打印')),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter集成Zebra设备插件flutter_zebra_sdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter集成Zebra设备插件flutter_zebra_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter应用中集成Zebra设备的SDK,特别是flutter_zebra_sdk插件,可以让你与Zebra打印机进行通信并执行打印任务。以下是如何在你的Flutter项目中集成和使用flutter_zebra_sdk的步骤。

1. 添加依赖

首先,在你的Flutter项目的pubspec.yaml文件中添加flutter_zebra_sdk插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  flutter_zebra_sdk: ^0.1.0  # 请检查最新版本

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

2. 配置Android和iOS项目

Android配置

android/app/build.gradle文件中,确保minSdkVersion至少为21:

android {
    ...
    defaultConfig {
        ...
        minSdkVersion 21
        ...
    }
    ...
}

iOS配置

ios/Podfile中,确保platform设置为11.0或更高:

platform :ios, '11.0'

然后,运行flutter pub getpod install来更新依赖。

3. 初始化SDK

在你的Flutter应用中,首先需要初始化Zebra SDK。通常,这可以在main.dart中的main函数中完成。

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await FlutterZebraSdk.init();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Zebra SDK Demo',
      home: HomeScreen(),
    );
  }
}

4. 使用SDK进行打印

在应用的主界面中,你可以使用flutter_zebra_sdk提供的API与Zebra设备进行通信。以下是一个简单的示例,展示如何发送ZPL(Zebra Programming Language)指令进行打印。

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

class HomeScreen extends StatelessWidget {
  Future<void> _printLabel() async {
    String printerAddress = "192.168.1.123"; // 替换为你的打印机IP地址
    String zplData = """
    ^XA
    ^FO50,50^A0N,50,50^FDHello, Zebra!^FS
    ^XZ
    """; // ZPL指令

    try {
      await FlutterZebraSdk.printZplOverTcp(printerAddress, zplData);
      print("Print successful");
    } catch (e) {
      print("Print failed: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Zebra SDK Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _printLabel,
          child: Text('Print Label'),
        ),
      ),
    );
  }
}

5. 处理设备发现和连接

flutter_zebra_sdk还提供了发现和连接Zebra设备的API。你可以使用这些API来扫描并连接到附近的Zebra打印机。

Future<void> _discoverAndConnect() async {
  try {
    // 发现附近的Zebra打印机
    List<DiscoveredPrinter> printers = await FlutterZebraSdk.discoverPrinters();
    
    if (printers.isNotEmpty) {
      // 连接到第一个发现的打印机
      DiscoveredPrinter printer = printers.first;
      await FlutterZebraSdk.connect(printer.address);
      print("Connected to printer: ${printer.address}");
    } else {
      print("No printers found");
    }
  } catch (e) {
    print("Discovery failed: $e");
  }
}

6. 其他功能

flutter_zebra_sdk还支持其他功能,如发送原始数据、获取打印机状态等。你可以查阅插件的文档或源代码以获取更多信息。

7. 运行应用

完成以上步骤后,你可以运行你的Flutter应用,并通过按钮触发打印任务或设备发现。

flutter run
回到顶部