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

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

安装

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

flutter pub add cartona_sunmi_printer

测试设备

  • Sunmi V2 Pro
  • Sunmi V2S

示例用法

在你的 Flutter 应用程序中,添加以下代码:

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

import 'package:cartona_sunmi_printer/cartona_sunmi_printer.dart';

void main() => runApp(const CartonaPrinterDemo());

class CartonaPrinterDemo extends StatelessWidget {
  const CartonaPrinterDemo({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      debugShowCheckedModeBanner: false,
      home: DemoScreen(),
    );
  }
}

class DemoScreen extends StatefulWidget {
  const DemoScreen({Key? key}) : super(key: key);

  [@override](/user/override)
  State<DemoScreen> createState() => _DemoScreenState();
}

class _DemoScreenState extends State<DemoScreen> {
  bool _isBound = false;

  [@override](/user/override)
  void initState() {
    super.initState();
    debugPrint('[CartonaPrinterDemo] Initializing printer');
    CartonaSunmiPrinter.initializePrinter().then((_) {
      setState(() => _isBound = true);
      debugPrint('[CartonaPrinterDemo] Printer initialized');
      showMessage('[CartonaPrinterDemo] Printer initialized');
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Cartona Sunmi Printer Demo'),
      ),
      body: Center(
        child: ListView(
          shrinkWrap: true,
          padding: const EdgeInsets.symmetric(horizontal: 32),
          children: [
            ElevatedButton(
              onPressed: !_isBound ? null : () => printVersion(),
              child: const Text('Check Printer Version'),
            ),
            ElevatedButton(
              onPressed: !_isBound ? null : () => printSampleReceipt(),
              child: const Text('Print Sample Receipt'),
            ),
          ],
        ),
      ),
    );
  }

  Future<void> printVersion() async {
    final version = await CartonaSunmiPrinter.getPrinterVersion() ?? 'Unknown';
    showMessage('Running on: $version');
  }

  Future<void> printSampleReceipt() async {
    var colWidths = [5, 1, 5, 1, 18];
    var colAlignments = List.generate(5, (_) => SunmiPrintAlign.right);

    await CartonaSunmiPrinter.startTransection();

    await CartonaSunmiPrinter.setFontSize(24);
    await CartonaSunmiPrinter.setBold(true);

    await CartonaSunmiPrinter.setAlignment(SunmiPrintAlign.center);
    await CartonaSunmiPrinter.printText("Hello World");

    await CartonaSunmiPrinter.setAlignment(SunmiPrintAlign.center);
    await CartonaSunmiPrinter.printText('日期: 2023/10/01');

    await CartonaSunmiPrinter.setAlignment(SunmiPrintAlign.center);
    await CartonaSunmiPrinter.printText('发票号码: 12345678');

    await CartonaSunmiPrinter.lineWrap(lines: 1);

    await CartonaSunmiPrinter.line();

    await CartonaSunmiPrinter.setFontSize(20);
    await CartonaSunmiPrinter.setBold(false);

    final labels = ['价格', '', '数量', '', '名称'];
    await CartonaSunmiPrinter.printRow(labels, colWidths, colAlignments);

    await CartonaSunmiPrinter.line();

    final p1 = ['100', '', '2x', '', '纯净水 - 1.5升'];
    await CartonaSunmiPrinter.printRow(p1, colWidths, colAlignments);

    await CartonaSunmiPrinter.line();

    final p2 = ['5', '', '1x', '', '火腿肠 - 250克'];
    await CartonaSunmiPrinter.printRow(p2, colWidths, colAlignments);

    await CartonaSunmiPrinter.setBold(true);
    await CartonaSunmiPrinter.setFontSize(24);

    await CartonaSunmiPrinter.line();

    await CartonaSunmiPrinter.setAlignment(SunmiPrintAlign.center);
    await CartonaSunmiPrinter.printText('总计: ${100}');

    await CartonaSunmiPrinter.setAlignment(SunmiPrintAlign.center);
    await CartonaSunmiPrinter.printText('折扣: ${10}');

    await CartonaSunmiPrinter.setAlignment(SunmiPrintAlign.center);
    await CartonaSunmiPrinter.printText('应付金额: ${90}');

    await CartonaSunmiPrinter.lineWrap();

    await CartonaSunmiPrinter.setBold(false);

    await CartonaSunmiPrinter.endTransection();
  }

  void showMessage(String text) =>
      ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(text)));
}

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

1 回复

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


cartona_sunmi_printer 是一个用于控制 SUNMI 打印机的 Flutter 插件。它允许你在 Flutter 应用中集成 SUNMI 打印机的功能。以下是如何使用 cartona_sunmi_printer 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  cartona_sunmi_printer: ^0.0.1  # 请确保使用最新版本

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

2. 导入插件

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

import 'package:cartona_sunmi_printer/cartona_sunmi_printer.dart';

3. 初始化打印机

在使用打印机之前,你需要初始化打印机:

void initPrinter() async {
  bool isInit = await CartonaSunmiPrinter.initPrinter();
  if (isInit) {
    print("Printer initialized successfully");
  } else {
    print("Failed to initialize printer");
  }
}

4. 打印文本

你可以使用 printText 方法来打印文本:

void printText() async {
  bool isPrinted = await CartonaSunmiPrinter.printText("Hello, SUNMI Printer!");
  if (isPrinted) {
    print("Text printed successfully");
  } else {
    print("Failed to print text");
  }
}

5. 打印条形码

你可以使用 printBarcode 方法来打印条形码:

void printBarcode() async {
  bool isPrinted = await CartonaSunmiPrinter.printBarcode("123456789012");
  if (isPrinted) {
    print("Barcode printed successfully");
  } else {
    print("Failed to print barcode");
  }
}

6. 打印二维码

你可以使用 printQRCode 方法来打印二维码:

void printQRCode() async {
  bool isPrinted = await CartonaSunmiPrinter.printQRCode("https://example.com");
  if (isPrinted) {
    print("QR Code printed successfully");
  } else {
    print("Failed to print QR Code");
  }
}

7. 打印图片

你可以使用 printImage 方法来打印图片:

void printImage() async {
  // 获取图片的字节数据
  ByteData data = await rootBundle.load('assets/image.png');
  Uint8List bytes = data.buffer.asUint8List();

  bool isPrinted = await CartonaSunmiPrinter.printImage(bytes);
  if (isPrinted) {
    print("Image printed successfully");
  } else {
    print("Failed to print image");
  }
}

8. 切纸

你可以使用 cutPaper 方法来切纸:

void cutPaper() async {
  bool isCut = await CartonaSunmiPrinter.cutPaper();
  if (isCut) {
    print("Paper cut successfully");
  } else {
    print("Failed to cut paper");
  }
}

9. 获取打印机状态

你可以使用 getPrinterStatus 方法来获取打印机状态:

void getPrinterStatus() async {
  int status = await CartonaSunmiPrinter.getPrinterStatus();
  print("Printer status: $status");
}

10. 处理异常

在使用打印机时,可能会遇到异常情况。你可以使用 try-catch 来捕获和处理异常:

void printSomething() async {
  try {
    await CartonaSunmiPrinter.printText("Printing something...");
  } catch (e) {
    print("Error: $e");
  }
}

11. 示例代码

以下是一个完整的示例代码,展示了如何初始化打印机并打印一些内容:

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

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

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

class PrinterScreen extends StatelessWidget {
  void initPrinter() async {
    bool isInit = await CartonaSunmiPrinter.initPrinter();
    if (isInit) {
      print("Printer initialized successfully");
    } else {
      print("Failed to initialize printer");
    }
  }

  void printText() async {
    bool isPrinted = await CartonaSunmiPrinter.printText("Hello, SUNMI Printer!");
    if (isPrinted) {
      print("Text printed successfully");
    } else {
      print("Failed to print text");
    }
  }

  void printBarcode() async {
    bool isPrinted = await CartonaSunmiPrinter.printBarcode("123456789012");
    if (isPrinted) {
      print("Barcode printed successfully");
    } else {
      print("Failed to print barcode");
    }
  }

  void printQRCode() async {
    bool isPrinted = await CartonaSunmiPrinter.printQRCode("https://example.com");
    if (isPrinted) {
      print("QR Code printed successfully");
    } else {
      print("Failed to print QR Code");
    }
  }

  void cutPaper() async {
    bool isCut = await CartonaSunmiPrinter.cutPaper();
    if (isCut) {
      print("Paper cut successfully");
    } else {
      print("Failed to cut paper");
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("SUNMI Printer Example"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: initPrinter,
              child: Text("Initialize Printer"),
            ),
            ElevatedButton(
              onPressed: printText,
              child: Text("Print Text"),
            ),
            ElevatedButton(
              onPressed: printBarcode,
              child: Text("Print Barcode"),
            ),
            ElevatedButton(
              onPressed: printQRCode,
              child: Text("Print QR Code"),
            ),
            ElevatedButton(
              onPressed: cutPaper,
              child: Text("Cut Paper"),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部