sunmi_printer_x_plus 0.0.6 copy "sunmi_printer_x_plus: ^0.0.6" to clipboard
sunmi_printer_x_plus: ^0.0.6 copied to clipboard

PlatformAndroid

A Flutter plugin for Sunmi printers that allows label printing with text, QR codes and images.

example/lib/main.dart

import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:sunmi_printer_x_plus/sunmi_printer_x_plus.dart';

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

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool _isConnected = false;
  final TextEditingController _productNameController = TextEditingController(text: "可口可乐");
  final TextEditingController _specificationController = TextEditingController(text: "2L");
  final TextEditingController _codeController = TextEditingController(text: "12345678");
  final TextEditingController _unitController = TextEditingController(text: "瓶");
  final TextEditingController _priceController = TextEditingController(text: "7.8");
  int _copies = 1;

  @override
  void initState() {
    super.initState();
    _initPrinter();
  }

  // Initialize the printer
  Future<void> _initPrinter() async {
    try {
      _isConnected = await SunmiPrinterXPlus.init();
      setState(() {});
    } catch (e) {
      print('Error initializing printer: $e');
    }
  }

  // Print a simple label
  Future<void> _printSimpleLabel() async {
    try {
      await SunmiPrinterXPlus.startLabelPrint(width: 30, height: 20);
      
      // Border box
      await SunmiPrinterXPlus.drawBox(x: 0, y: 0, width: 240, height: 159);
      
      // Title text
      await SunmiPrinterXPlus.printText(
        text: "品牌:SUNMI",
        x: 10,
        y: 10,
        fontSize: 32,
        bold: true,
      );
      
      // Description text
      await SunmiPrinterXPlus.printText(
        text: "商米是一家以为核心价值观的物联网科技公司",
        x: 60,
        y: 50,
        fontSize: 20,
        width: 160,
        height: 100,
      );
      
      // Print with 1 copy
      await SunmiPrinterXPlus.commitLabelPrint(copies: 1);
      
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(content: Text('Simple label printed successfully')),
      );
    } catch (e) {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Error printing label: $e')),
      );
    }
  }

  // Print a product label
  Future<void> _printProductLabel() async {
    try {
      await SunmiPrinterXPlus.printProductLabel(
        productName: _productNameController.text,
        specification: _specificationController.text,
        code: _codeController.text,
        unit: _unitController.text,
        price: _priceController.text,
        copies: _copies,
      );
      
     print("Product label printed successfully");
    } catch (e) {
      print("Error printing product label: $e");
    }
  }

  // Print a QR code
  Future<void> _printQRCode() async {
    try {
      await SunmiPrinterXPlus.startLabelPrint(width: 30, height: 30);
      
      // Border
      await SunmiPrinterXPlus.drawBox(x: 0, y: 0, width: 240, height: 240);
      
      // Title
      await SunmiPrinterXPlus.printText(
        text: "SUNMI QR Code",
        x: 10,
        y: 10,
        fontSize: 24,
        bold: true,
      );
      
      // QR Code
      await SunmiPrinterXPlus.printQRCode(
        data: "https://www.sunmi.com",
        x: 60,
        y: 50,
        size: 120,
        errorCorrectionLevel: QRCodeErrorCorrectionLevel.high,
      );
      
      // Print with 1 copy
      await SunmiPrinterXPlus.commitLabelPrint(copies: 1);
      
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(content: Text('QR code printed successfully')),
      );
    } catch (e) {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Error printing QR code: $e')),
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Sunmi Printer X Plus Example'),
        ),
        body: SingleChildScrollView(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              // Printer status
              Card(
                child: Padding(
                  padding: const EdgeInsets.all(16.0),
                  child: Row(
                    children: [
                      Icon(
                        _isConnected ? Icons.check_circle : Icons.error,
                        color: _isConnected ? Colors.green : Colors.red,
                      ),
                      const SizedBox(width: 8),
                      Text(
                       _isConnected ? "Printer connected" : "Printer disconnected",
                        style: Theme.of(context).textTheme.titleMedium,
                      ),
                    ],
                  ),
                ),
              ),
              const SizedBox(height: 16),

              // Product label form
              Card(
                child: Padding(
                  padding: const EdgeInsets.all(16.0),
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Text(
                        'Product Label',
                        style: Theme.of(context).textTheme.titleLarge,
                      ),
                      const SizedBox(height: 16),
                      TextField(
                        controller: _productNameController,
                        decoration: const InputDecoration(
                          labelText: 'Product Name',
                          border: OutlineInputBorder(),
                        ),
                      ),
                      const SizedBox(height: 8),
                      TextField(
                        controller: _specificationController,
                        decoration: const InputDecoration(
                          labelText: 'Specification',
                          border: OutlineInputBorder(),
                        ),
                      ),
                      const SizedBox(height: 8),
                      TextField(
                        controller: _codeController,
                        decoration: const InputDecoration(
                          labelText: 'Product Code',
                          border: OutlineInputBorder(),
                        ),
                      ),
                      const SizedBox(height: 8),
                      TextField(
                        controller: _unitController,
                        decoration: const InputDecoration(
                          labelText: 'Unit',
                          border: OutlineInputBorder(),
                        ),
                      ),
                      const SizedBox(height: 8),
                      TextField(
                        controller: _priceController,
                        decoration: const InputDecoration(
                          labelText: 'Price',
                          border: OutlineInputBorder(),
                        ),
                        keyboardType: TextInputType.number,
                      ),
                      const SizedBox(height: 16),
                      Row(
                        children: [
                          const Text('Copies: '),
                          IconButton(
                            icon: const Icon(Icons.remove),
                            onPressed: () {
                              if (_copies > 1) {
                                setState(() {
                                  _copies--;
                                });
                              }
                            },
                          ),
                          Text('$_copies'),
                          IconButton(
                            icon: const Icon(Icons.add),
                            onPressed: () {
                              setState(() {
                                _copies++;
                              });
                            },
                          ),
                        ],
                      ),
                      const SizedBox(height: 16),
                      SizedBox(
                        width: double.infinity,
                        child: ElevatedButton(
                          onPressed: _isConnected ? _printProductLabel : null,
                          child: const Text('Print Product Label'),
                        ),
                      ),
                    ],
                  ),
                ),
              ),
              const SizedBox(height: 16),

              // Quick print buttons
              Row(
                children: [
                  Expanded(
                    child: ElevatedButton(
                      onPressed: _isConnected ? _printSimpleLabel : null,
                      child: const Text('Print Simple Label'),
                    ),
                  ),
                  const SizedBox(width: 8),
                  Expanded(
                    child: ElevatedButton(
                      onPressed: _isConnected ? _printQRCode : null,
                      child: const Text('Print QR Code'),
                    ),
                  ),
                ],
              ),
            ],
          ),
        ),
      ),
    );
  }

  @override
  void dispose() {
    _productNameController.dispose();
    _specificationController.dispose();
    _codeController.dispose();
    _unitController.dispose();
    _priceController.dispose();
    super.dispose();
  }
}
0
likes
145
points
5
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter plugin for Sunmi printers that allows label printing with text, QR codes and images.

Homepage

Documentation

API reference

License

MIT (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on sunmi_printer_x_plus

Packages that implement sunmi_printer_x_plus