flutter_bixolon_printer 0.0.1
flutter_bixolon_printer: ^0.0.1 copied to clipboard
A Flutter plugin for connecting to and printing with Bixolon thermal printers. Supports device discovery, connection management, text/image/barcode printing, and international character sets.
Flutter Bixolon Printer Plugin #
A Flutter plugin for connecting to and printing with Bixolon thermal printers. This plugin provides a comprehensive interface for discovering, connecting to, and using Bixolon printers across multiple connection types.
🚨 Platform Support Notice #
IMPORTANT: This plugin SUPPORTS ANDROID ONLY
- Currently compatible with Android devices
- NOT supported on iOS, Web, or other platforms
Features #
- Device Discovery: Scan for Bixolon printers via Bluetooth, WiFi, or Ethernet
- Connection Management: Connect to printers with timeout handling and status monitoring
- Basic Printing:
- Text printing with various formatting options
- Image printing (from file path or image data)
- QR code and barcode printing
- Advanced Printing:
- Multi-column text layouts
- Formatted receipts with headers and footers
- Support for international text
- Tables and structured layouts
- Printer Controls:
- Paper cutting
- Status checking
- Feed to black mark
- Transaction mode
Supported Printer Models #
- SPP-R200II, SPP-R200III
- SPP-R210, SPP-R215, SPP-R220
- SPP-R300, SPP-R310
- SPP-R400, SPP-R410, SPP-R418
- SPP-C200, SPP-C300
- And other Bixolon printers supported by the Bixolon SDK
Installation #
Add this to your package's pubspec.yaml file:
dependencies:
flutter_bixolon_printer: ^0.0.1
Android Setup #
- Add permissions to your
AndroidManifest.xml:
<!-- Bluetooth permissions -->
<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" />
<!-- Location is required for Bluetooth scanning on Android 6.0+ -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- For USB connection -->
<uses-feature android:name="android.hardware.usb.host" />
<!-- For Wi-Fi connection -->
<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" />
<!-- For file access -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- Minimum SDK version should be 21 or higher in your app's
build.gradle:
minSdk = 21
- The plugin requires Bixolon SDK JAR files. These are included in the plugin's
android/libsdirectory, so you don't need to add them separately.
Quick Start #
Scanning for Printers #
// Scan for Bluetooth printers
List<PrinterDevice> bluetoothPrinters = await FlutterBixolonPrinter.scanBluetoothPrinters();
// Or scan for network printers
List<PrinterDevice> networkPrinters = await FlutterBixolonPrinter.scanNetworkPrinters();
// Or scan all types
List<PrinterDevice> allPrinters = await FlutterBixolonPrinter.scanPrinters(ConnectionType.bluetooth);
Connecting to a Printer #
// Initialize the printer
await FlutterBixolonPrinter.initialize(
deviceName: 'BixolonPrinter',
address: printer.address,
connectionType: printer.connectionType,
model: 'SPP-R400',
);
// Connect to the printer
bool connected = await FlutterBixolonPrinter.connect(timeout: 5000);
Basic Printing #
// Print text
await FlutterBixolonPrinter.printText("Hello World!\n");
// Print QR code
await FlutterBixolonPrinter.printBarcode(
"https://example.com",
BarcodeType.qrCode,
height: 200,
width: 6,
alignment: Alignment.center,
textPosition: BarcodeTextPosition.below,
);
// Print image from file
await FlutterBixolonPrinter.printImage(
"/path/to/image.png",
width: 576,
alignment: Alignment.center,
);
Advanced Printing #
// Multi-column text
await FlutterBixolonPrinter.printFormattedText(
columns: [
TextColumn(text: 'Item', x: 10, align: TextAlign.left),
TextColumn(text: 'Qty', x: 300, align: TextAlign.center),
TextColumn(text: 'Price', x: 500, align: TextAlign.right),
],
);
// Sample receipt
await FlutterBixolonPrinter.printReceipt(
header: 'RECEIPT',
items: [
{'product': 'Coffee', 'qty': '2', 'price': '\$3.99'},
{'product': 'Sandwich', 'qty': '1', 'price': '\$5.99'},
],
columnWidths: {
'product': 300,
'qty': 100,
'price': 176,
},
footer: 'Thank you!',
fontSize: 20,
);
Permissions #
This plugin requires several permissions to function properly:
- Bluetooth permissions: For discovering and connecting to Bluetooth printers
- Location permissions: Required for Bluetooth scanning on Android
- Network permissions: For connecting to network printers
- Storage permissions: For reading image files to print
Make sure to request these permissions at runtime using the permission_handler package:
await [
Permission.bluetooth,
Permission.bluetoothConnect,
Permission.bluetoothScan,
Permission.location,
Permission.storage,
].request();
SDK Requirements #
This plugin requires the Bixolon UPOS SDK for Android. The necessary JAR files are included in the plugin, so you don't need to add them separately.
Troubleshooting #
Connection Issues #
- Ensure Bluetooth is enabled on the device
- Check that the printer is powered on and in discoverable mode
- For network printers, verify the IP address is correct and the printer is on the same network
- Ensure all required permissions are granted
Printing Issues #
- Check printer status for errors (paper out, cover open, etc.)
- Verify correct printer model is specified during initialization
- For image printing issues, check image format and size
Android Build Issues #
- Ensure your Android app's minSdkVersion is at least 21
- Check that all required permissions are in your AndroidManifest.xml
API Reference #
FlutterBixolonPrinter #
Main class for interacting with Bixolon printers.
Scanning Methods
static Future<List<PrinterDevice>> scanBluetoothPrinters()static Future<List<PrinterDevice>> scanNetworkPrinters()static Future<List<PrinterDevice>> scanPrinters(ConnectionType connectionType)
Connection Methods
static Future<bool> initialize({required String deviceName, required String address, required ConnectionType connectionType, required String model})static Future<bool> connect({int timeout = 5000})static Future<bool> disconnect()static Future<PrinterStatus> getStatus()
Basic Printing Methods
static Future<bool> printText(String text)static Future<bool> printImage(String imagePath, {int width = 0, Alignment alignment = Alignment.centerLeft})static Future<bool> printImageBytes(Uint8List imageBytes, {int width = 0, Alignment alignment = Alignment.centerLeft})static Future<bool> printBarcode(String data, BarcodeType type, {int height = 100, int width = 2, Alignment alignment = Alignment.center, BarcodeTextPosition textPosition = BarcodeTextPosition.below})static Future<bool> printQRCode(String data, {int size = 200, Alignment alignment = Alignment.center})static Future<bool> printCode128Barcode({required String barcodeData, String displayText = "", String leftText = "", double height = 38, bool displayValue = true, int textSize = 24, double leftTextWidth = 200, double leftTextPosition = 155, int printerWidth = 576,})
Advanced Printing Methods
static Future<bool> printFormattedText({required List<TextColumn> columns, int lineWidth = 48, bool addNewLine = true,})static Future<bool> printMultipleColumn({required List<PrintColumn> columns, int canvasWidth = 832, double lineHeight = 1.5, Alignment alignment = Alignment.center, double padding = 10,})static Future<bool> printReceipt({required List<Map<String, dynamic>> items, String? header, String? footer, String fontFamily = 'Siemreap', double fontSize = 20, FontWeight fontWeight = FontWeight.normal, int? printerWidth, double lineSpacing = 5.0, Map<String, double>? columnWidths,})static Future<bool> printBlankLines(int numberOfLines)
Printer Control Methods
static Future<bool> feedToBlackMark()static Future<bool> cutPaper({bool fullCut = true})
Enums #
ConnectionType: bluetooth, ethernet, usb, wifi, wifiDirect, bluetoothLEBarcodeType: upca, upce, ean13, ean8, code39, itf, codabar, code93, code128, gs1DataBar, pdf417, qrCode, maxiCode, dataMatrix, ean128BarcodeTextPosition: none, above, belowPrinterStatus: ready, coverOpen, paperEmpty, paperNearEmpty, batteryLow, offline, unknown