flutter_sunmi_printer_old
A Flutter plugin for Sunmi thermal printers. This plugin provides a comprehensive interface for printing text, images, and formatted content on Sunmi thermal printers.
Features
- Text Printing: Print text with customizable alignment, font size, bold, and underline
- Row Printing: Print formatted table rows with multiple columns
- Image Printing: Print images from base64 encoded data
- Printer Control: Start, stop, and check printing status
- Formatting: Bold, underline, and empty line controls
- Modern Flutter 3.32.6+ Support: Built with the latest Flutter plugin architecture
- Backward Compatibility: Supports both original API style and new API
Installation
Add this to your package's pubspec.yaml file:
dependencies:
flutter_sunmi_printer_old: ^0.0.1
Usage
Basic Setup
import 'package:flutter_sunmi_printer_old/flutter_sunmi_printer_old.dart';
final printer = FlutterSunmiPrinterOld();
Original API Style (Recommended for existing projects)
// Simple text printing with styles
await printer.text(
'Hello World',
styles: SunmiStyles(
align: SunmiAlign.center,
bold: true,
size: SunmiSize.lg,
),
linesAfter: 1,
);
// Print horizontal separator
await printer.hr(linesAfter: 1);
// Print table row
await printer.row(
cols: [
SunmiCol(text: 'Item', width: 8, align: SunmiAlign.left),
SunmiCol(text: 'Price', width: 2, align: SunmiAlign.right),
SunmiCol(text: 'Qty', width: 2, align: SunmiAlign.right),
],
bold: true,
linesAfter: 1,
);
// Print image
await printer.image(
imageBase64String,
align: SunmiAlign.center,
);
New API Style
// Simple text printing
await printer.printText(text: 'Hello World');
// Formatted text printing
await printer.printText(
text: 'Centered Bold Text',
align: 1, // 0=left, 1=center, 2=right
bold: true,
underline: true,
size: 32,
linesAfter: 2,
);
// Print table row
final rowData = [
{'text': 'Item', 'width': 16, 'align': 0},
{'text': 'Price', 'width': 8, 'align': 2},
{'text': 'Qty', 'width': 8, 'align': 2},
];
await printer.printRow(
cols: rowData.toString(),
bold: true,
linesAfter: 1,
);
// Print image
await printer.printImage(
base64: imageBase64String,
align: 1, // Center the image
);
Printer Control
// Start printing
await printer.startPrint();
// Check if printer is printing
bool isPrinting = await printer.isPrinting();
// Stop printing
await printer.stopPrint();
// Reset printer
await printer.reset();
Formatting Controls
// Bold controls
await printer.boldOn();
await printer.boldOff();
// Underline controls
await printer.underlineOn();
await printer.underlineOff();
// Empty lines
await printer.emptyLines(3);
Complete Example (Original API Style)
Future<void> printReceipt() async {
try {
// Reset and start printing
await printer.reset();
await printer.startPrint();
// Print header
await printer.text(
'RECEIPT',
styles: SunmiStyles(
align: SunmiAlign.center,
bold: true,
size: SunmiSize.lg,
),
linesAfter: 1,
);
// Print separator
await printer.hr(linesAfter: 1);
// Print items
final items = [
['Coffee', '\$3.50', '2'],
['Tea', '\$2.00', '1'],
];
for (final item in items) {
await printer.row(
cols: [
SunmiCol(text: item[0], width: 8, align: SunmiAlign.left),
SunmiCol(text: item[1], width: 2, align: SunmiAlign.right),
SunmiCol(text: item[2], width: 2, align: SunmiAlign.right),
],
linesAfter: 1,
);
}
// Print total
await printer.text(
'Total: \$8.50',
styles: SunmiStyles(
align: SunmiAlign.right,
bold: true,
size: SunmiSize.md,
),
linesAfter: 2,
);
// Stop printing
await printer.stopPrint();
} catch (e) {
print('Print error: $e');
}
}
Enums and Styles
The plugin provides enums for better type safety:
// Alignment options
SunmiAlign.left // 0
SunmiAlign.center // 1
SunmiAlign.right // 2
// Font size options
SunmiSize.xs // 14
SunmiSize.sm // 18
SunmiSize.md // 24
SunmiSize.lg // 36
SunmiSize.xl // 42
// Style combinations
SunmiStyles(
bold: true,
underline: false,
align: SunmiAlign.center,
size: SunmiSize.lg,
)
Android Permissions
The plugin requires the following permissions in your Android app:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Dependencies
The plugin includes the following Sunmi printer libraries:
core-3.4.0.jarpayLib.aar
Migration from tablemi
This plugin is a modernized version of the original tablemi flutter_sunmi_printer plugin, updated for Flutter 3.32.6+ with the following improvements:
- Modern Flutter plugin architecture
- Better error handling
- Improved type safety
- Cleaner API design
- Better documentation
- Backward compatibility with original API style
Migration Guide
If you're migrating from the original tablemi plugin, you can use the same API:
// Old code (still works)
await printer.text('Hello', styles: SunmiStyles(bold: true));
await printer.row(cols: [SunmiCol(text: 'Item', width: 8)]);
await printer.image(base64String);
// New code (also available)
await printer.printText(text: 'Hello', bold: true);
await printer.printRow(cols: rowData.toString());
await printer.printImage(base64: base64String);
Getting Started
For more information on how to integrate this plugin into your Flutter app, see the example directory.
License
This project is licensed under the MIT License - see the LICENSE file for details.