maswend_bt_printer 0.0.3
maswend_bt_printer: ^0.0.3 copied to clipboard
Plugin Untuk Printer Thermal Bluetooth (Android Only).
example/lib/main.dart
import 'dart:async';
import 'package:maswend_bt_printer/maswend_bt_printer.dart';
import 'package:esc_pos_utils_plus/esc_pos_utils.dart';
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
}
bool connected = false;
List availableBluetoothDevices = [];
Future<void> getBluetooth() async {
final List? bluetooths = await MaswendBTPrinter.getBluetooths;
print("Print $bluetooths");
setState(() {
availableBluetoothDevices = bluetooths!;
});
}
Future<void> setConnect(String mac) async {
final String? result = await MaswendBTPrinter.connect(mac);
print("state connected $result");
if (result == "true") {
setState(() {
connected = true;
});
}
}
Future<void> printTicket() async {
String? isConnected = await MaswendBTPrinter.connectionStatus;
if (isConnected == "true") {
List<int> bytes = await getTicket();
final result = await MaswendBTPrinter.writeBytes(bytes);
print("Print $result");
} else {
//Hadnle Not Connected Senario
}
}
Future<void> printGraphics() async {
String? isConnected = await MaswendBTPrinter.connectionStatus;
if (isConnected == "true") {
List<int> bytes = await getGraphicsTicket();
final result = await MaswendBTPrinter.writeBytes(bytes);
print("Print $result");
} else {
//Hadnle Not Connected Senario
}
}
Future<List<int>> getGraphicsTicket() async {
List<int> bytes = [];
CapabilityProfile profile = await CapabilityProfile.load();
final generator = Generator(PaperSize.mm80, profile);
// Print QR Code using native function
bytes += generator.qrcode('mwend.com');
bytes += generator.hr();
// Print Barcode using native function
final List<int> barData = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 4];
bytes += generator.barcode(Barcode.upcA(barData));
bytes += generator.cut();
return bytes;
}
Future<List<int>> getTicket() async {
List<int> bytes = [];
CapabilityProfile profile = await CapabilityProfile.load();
final generator = Generator(PaperSize.mm80, profile);
bytes += generator.text("Demo Toko",
styles: PosStyles(
align: PosAlign.center,
height: PosTextSize.size2,
width: PosTextSize.size2,
),
linesAfter: 1);
bytes += generator.text("JL.Bypass Ujungaris - Widasari - Indramayu",
styles: PosStyles(align: PosAlign.center));
bytes += generator.text('Tel: +628991585001',
styles: PosStyles(align: PosAlign.center));
bytes += generator.hr();
bytes += generator.row([
PosColumn(
text: 'No',
width: 1,
styles: PosStyles(align: PosAlign.left, bold: true)),
PosColumn(
text: 'Produk',
width: 5,
styles: PosStyles(align: PosAlign.left, bold: true)),
PosColumn(
text: 'Harga',
width: 2,
styles: PosStyles(align: PosAlign.center, bold: true)),
PosColumn(
text: 'Jml',
width: 2,
styles: PosStyles(align: PosAlign.center, bold: true)),
PosColumn(
text: 'Total',
width: 2,
styles: PosStyles(align: PosAlign.right, bold: true)),
]);
bytes += generator.row([
PosColumn(text: "1", width: 1),
PosColumn(
text: "Mie Indomie",
width: 5,
styles: PosStyles(
align: PosAlign.left,
)),
PosColumn(
text: "3000",
width: 2,
styles: PosStyles(
align: PosAlign.center,
)),
PosColumn(text: "1", width: 2, styles: PosStyles(align: PosAlign.center)),
PosColumn(
text: "3000", width: 2, styles: PosStyles(align: PosAlign.right)),
]);
bytes += generator.row([
PosColumn(text: "2", width: 1),
PosColumn(
text: "Kecap Sedap",
width: 5,
styles: PosStyles(
align: PosAlign.left,
)),
PosColumn(
text: "1500",
width: 2,
styles: PosStyles(
align: PosAlign.center,
)),
PosColumn(text: "2", width: 2, styles: PosStyles(align: PosAlign.center)),
PosColumn(
text: "3000", width: 2, styles: PosStyles(align: PosAlign.right)),
]);
bytes += generator.row([
PosColumn(text: "3", width: 1),
PosColumn(
text: "Pantine",
width: 5,
styles: PosStyles(
align: PosAlign.left,
)),
PosColumn(
text: "500",
width: 2,
styles: PosStyles(
align: PosAlign.center,
)),
PosColumn(text: "4", width: 2, styles: PosStyles(align: PosAlign.center)),
PosColumn(
text: "2000", width: 2, styles: PosStyles(align: PosAlign.right)),
]);
bytes += generator.row([
PosColumn(text: "4", width: 1),
PosColumn(
text: "Kopi Mix",
width: 5,
styles: PosStyles(
align: PosAlign.left,
)),
PosColumn(
text: "1500",
width: 2,
styles: PosStyles(
align: PosAlign.center,
)),
PosColumn(text: "2", width: 2, styles: PosStyles(align: PosAlign.center)),
PosColumn(
text: "3000", width: 2, styles: PosStyles(align: PosAlign.right)),
]);
bytes += generator.hr();
bytes += generator.row([
PosColumn(
text: 'TOTAL',
width: 6,
styles: PosStyles(
align: PosAlign.left,
height: PosTextSize.size4,
width: PosTextSize.size4,
)),
PosColumn(
text: "11000",
width: 6,
styles: PosStyles(
align: PosAlign.right,
height: PosTextSize.size4,
width: PosTextSize.size4,
)),
]);
bytes += generator.hr(ch: '=', linesAfter: 1);
// ticket.feed(2);
bytes += generator.text('Terimakasih!',
styles: PosStyles(align: PosAlign.center, bold: true));
bytes += generator.text("26-11-2020 15:22:45",
styles: PosStyles(align: PosAlign.center), linesAfter: 1);
bytes += generator.text(
'Note: Barang Yang Dibeli Tidak Dapat Dikembalikan.',
styles: PosStyles(align: PosAlign.center, bold: false));
bytes += generator.cut();
return bytes;
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Bluetooth Thermal Printer Demo'),
),
body: Container(
padding: EdgeInsets.all(20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("Search Paired Bluetooth"),
TextButton(
onPressed: () {
this.getBluetooth();
},
child: Text("Search"),
),
Container(
height: 200,
child: ListView.builder(
itemCount: availableBluetoothDevices.length > 0
? availableBluetoothDevices.length
: 0,
itemBuilder: (context, index) {
return ListTile(
onTap: () {
String select = availableBluetoothDevices[index];
List list = select.split("#");
// String name = list[0];
String mac = list[1];
this.setConnect(mac);
},
title: Text('${availableBluetoothDevices[index]}'),
subtitle: Text("Click to connect"),
);
},
),
),
SizedBox(
height: 30,
),
TextButton(
onPressed: connected ? this.printGraphics : null,
child: Text("Print"),
),
TextButton(
onPressed: connected ? this.printTicket : null,
child: Text("Print Ticket"),
),
],
),
),
),
);
}
}