thermal_printer_billbay 1.0.4 copy "thermal_printer_billbay: ^1.0.4" to clipboard
thermal_printer_billbay: ^1.0.4 copied to clipboard

A comprehensive Flutter plugin for ESC/POS thermal printers via Bluetooth Classic (SPP). Supports Arabic shaping, multiple code pages, receipt templates, images, QR codes, barcodes, and all standard E [...]

example/lib/main.dart

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

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(home: PrinterDemo());
  }
}

class PrinterDemo extends StatefulWidget {
  const PrinterDemo({super.key});

  @override
  State<PrinterDemo> createState() => _PrinterDemoState();
}

class _PrinterDemoState extends State<PrinterDemo> {
  final _printer = ThermalPrinterManager();
  List<BluetoothDevice> _devices = [];
  bool _connected = false;
  String _status = 'Not connected';

  @override
  void initState() {
    super.initState();
    _printer.connectionState.listen((connected) {
      setState(() {
        _connected = connected;
        _status = connected ? 'Connected' : 'Disconnected';
      });
    });
  }

  Future<void> _setup() async {
    setState(() => _status = 'Setting up...');
    final ready = await _printer.ensureReady();
    if (!ready) {
      setState(() => _status = 'Permissions denied or Bluetooth off');
      return;
    }
    final devices = await _printer.getBondedDevices();
    setState(() {
      _devices = devices;
      _status = 'Found ${devices.length} paired devices';
    });
  }

  Future<void> _connect(BluetoothDevice device) async {
    setState(() => _status = 'Connecting to ${device.name}...');
    final ok = await _printer.connectWithRetry(device.address);
    setState(() => _status = ok ? 'Connected to ${device.name}' : 'Connection failed');
  }

  Future<void> _printTest() async {
    if (!_connected) return;

    final cmd = EscPosCommands(PaperSize.mm80);
    cmd.initialize();
    cmd.textStyled(
      'TEST PRINT',
      PosStyles(align: PrintAlign.center, bold: true, width: 2, height: 2),
      useLatin: true,
    );
    cmd.hr();
    cmd.textLn('Hello from thermal_printer_billbay!', useLatin: true);
    cmd.leftRight('Date:', DateTime.now().toString().substring(0, 16), useLatin: true);
    cmd.hr();
    cmd.printQrCode('https://pub.dev/packages/thermal_printer_billbay', size: 6);
    cmd.feedAndCut();

    await _printer.sendBytes(cmd.getBytes());
    setState(() => _status = 'Print sent!');
  }

  @override
  void dispose() {
    _printer.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Thermal Printer Demo')),
      body: Padding(
        padding: const EdgeInsets.all(16),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            Text('Status: $_status', style: const TextStyle(fontSize: 16)),
            const SizedBox(height: 16),
            ElevatedButton(
              onPressed: _setup,
              child: const Text('Setup (Permissions + Scan)'),
            ),
            const SizedBox(height: 8),
            Expanded(
              child: ListView.builder(
                itemCount: _devices.length,
                itemBuilder: (context, index) {
                  final device = _devices[index];
                  return ListTile(
                    title: Text(device.name),
                    subtitle: Text(device.address),
                    onTap: () => _connect(device),
                  );
                },
              ),
            ),
            ElevatedButton(
              onPressed: _connected ? _printTest : null,
              child: const Text('Print Test Page'),
            ),
          ],
        ),
      ),
    );
  }
}
1
likes
0
points
112
downloads

Publisher

unverified uploader

Weekly Downloads

A comprehensive Flutter plugin for ESC/POS thermal printers via Bluetooth Classic (SPP). Supports Arabic shaping, multiple code pages, receipt templates, images, QR codes, barcodes, and all standard ESC/POS commands.

Repository (GitLab)
View/report issues

Topics

#printer #bluetooth #thermal-printer #escpos

License

unknown (license)

Dependencies

flutter, image

More

Packages that depend on thermal_printer_billbay

Packages that implement thermal_printer_billbay