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
Libraries
- constants
- flutter_bixolon_printer
- A Flutter plugin for Bixolon printers.
- print_column
- printer_barcodes
- printer_discovery
- printer_images
- printer_receipts
- printer_text