f001_receipt_printing 2.2.0 copy "f001_receipt_printing: ^2.2.0" to clipboard
f001_receipt_printing: ^2.2.0 copied to clipboard

Flutter Package for Receipt Printing

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:f001_receipt_printing/f001_receipt_printing.dart';
import 'package:f001_receipt_printing/f001_receipt_printing_enums.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Receipt Printing Demo',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: const ReceiptPrinterDemo(),
    );
  }
}

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

  @override
  State<ReceiptPrinterDemo> createState() => _ReceiptPrinterDemoState();
}

class _ReceiptPrinterDemoState extends State<ReceiptPrinterDemo> {
  late F001ReceiptPrinting _printer;
  bool _isLoading = false;
  String _status = "Not connected";
  List<String> _deviceNames = [];

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

  Future<void> _initializePrinter() async {
    _printer = await F001ReceiptPrinting.initialisePrinter(paperSize: PrinterPaperSize.mm58);
  }

  Future<void> _scanDevices() async {
    setState(() {
      _isLoading = true;
      _status = "Scanning...";
    });

    final devices = await _printer.scanForDevices();
    setState(() {
      _deviceNames = devices.map((d) => d.name ?? d.address).toList();
      _isLoading = false;
      _status = devices.isEmpty ? "No devices found" : "Found ${devices.length} device(s)";
    });
  }

  Future<void> _connectToFirstDevice() async {
    final devices = await _printer.scanForDevices();
    if (devices.isEmpty) {
      setState(() => _status = "No devices to connect.");
      return;
    }

    final response = await _printer.connectToDevice(device: devices.first);
    setState(() {
      _status = response.actionSuccess
          ? "Connected to: ${devices.first.name ?? devices.first.address}"
          : "Connection failed: ${response.errorMessage}";
    });
  }

  Future<void> _disconnectFromDevice() async {
    await _printer.disconnectFromDevice();
    setState(() => _status = "Disconnected from printer.");
  }

  Future<void> _printReceipt() async {
    final response = await _printer.printReceipt(
      widgetToBeCaptured: _buildReceiptWidget(),
      context: context,
    );

    setState(() {
      _status = response.actionSuccess
          ? "Receipt sent to printer"
          : "Print failed: ${response.errorMessage}";
    });
  }

  Widget _buildReceiptWidget() {
    return Container(
      color: Colors.white,
      padding: const EdgeInsets.all(10),
      width: F001ReceiptPrinting.getWidgetWidthFromPaperSize(
        paperSize: PrinterPaperSize.mm58,
      ),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: const [
          Text("🏪 My Store", style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold)),
          SizedBox(height: 10),
          Text("1x Apple  .............. \$2.00"),
          Text("2x Banana .............. \$3.00"),
          Divider(),
          Text("Total: \$5.00", style: TextStyle(fontWeight: FontWeight.bold)),
          SizedBox(height: 10),
          Text("Thank you! 😊"),
        ],
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("Receipt Printer Example")),
      body: Padding(
        padding: const EdgeInsets.all(16),
        child: Center(
          child: _isLoading
              ? const CircularProgressIndicator()
              : Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text("Status: $_status", style: const TextStyle(fontSize: 16)),
              const SizedBox(height: 20),
              ElevatedButton(
                onPressed: _scanDevices,
                child: const Text("🔍 Scan Devices"),
              ),
              const SizedBox(height: 10),
              ElevatedButton(
                onPressed: _connectToFirstDevice,
                child: const Text("🔌 Connect to First Device"),
              ),
              const SizedBox(height: 10),
              ElevatedButton(
                onPressed: _disconnectFromDevice,
                child: const Text("❌ Disconnect"),
              ),
              const SizedBox(height: 10),
              ElevatedButton(
                onPressed: _printReceipt,
                child: const Text("🖨️ Print Sample Receipt"),
              ),
              const SizedBox(height: 30),
              const Text("Devices Found:", style: TextStyle(fontWeight: FontWeight.bold)),
              ..._deviceNames.map((name) => Text(name)).toList(),
            ],
          ),
        ),
      ),
    );
  }
}