f001_receipt_printing 2.2.0
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(),
],
),
),
),
);
}
}