104 lines
3.0 KiB
Dart
104 lines
3.0 KiB
Dart
import 'dart:typed_data';
|
|
|
|
import 'package:charset_converter/charset_converter.dart';
|
|
import 'package:esc_pos_bluetooth/esc_pos_bluetooth.dart';
|
|
import 'package:esc_pos_utils/esc_pos_utils.dart';
|
|
import 'package:flutter/services.dart';
|
|
import 'package:flutter_bluetooth_basic/flutter_bluetooth_basic.dart';
|
|
import 'package:image/image.dart';
|
|
import 'package:satu/core/models/settings/printer_setting.dart';
|
|
|
|
Future<List<int>> getReceipt(String encoding, String paperSize) async {
|
|
final profile = await CapabilityProfile.load();
|
|
final generator = Generator(
|
|
paperSize == PrinterConst.paperSize58mm ? PaperSize.mm58 : PaperSize.mm80,
|
|
profile,
|
|
);
|
|
|
|
String codeTable = 'CP866';
|
|
if(encoding == PrinterConst.encodingCP866) {
|
|
codeTable = 'CP866';
|
|
} else if(encoding == PrinterConst.encodingCP1251) {
|
|
codeTable = 'CP1251';
|
|
}
|
|
|
|
|
|
List<int> bytes = [];
|
|
generator.setGlobalCodeTable(codeTable);
|
|
final Uint8List firstCol =
|
|
await CharsetConverter.encode(encoding.toLowerCase(), 'Тестовый чек');
|
|
bytes += generator.textEncoded(firstCol);
|
|
|
|
bytes +=
|
|
generator.text('CENTER', styles: const PosStyles(align: PosAlign.center));
|
|
bytes += generator.text('Right',
|
|
styles: const PosStyles(align: PosAlign.right), linesAfter: 1);
|
|
|
|
bytes += generator.row([
|
|
PosColumn(
|
|
text: 'col3',
|
|
width: 3,
|
|
styles: const PosStyles(align: PosAlign.center, underline: true),
|
|
),
|
|
PosColumn(
|
|
text: 'col6',
|
|
width: 6,
|
|
styles: const PosStyles(align: PosAlign.center, underline: true),
|
|
),
|
|
PosColumn(
|
|
text: 'col3',
|
|
width: 3,
|
|
styles: const PosStyles(align: PosAlign.center, underline: true),
|
|
),
|
|
]);
|
|
|
|
bytes += generator.text(
|
|
'Text size 200%',
|
|
styles: const PosStyles(
|
|
height: PosTextSize.size2,
|
|
width: PosTextSize.size2,
|
|
),
|
|
);
|
|
|
|
// Print barcode
|
|
final List<int> barData = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 4];
|
|
bytes += generator.barcode(Barcode.upcA(barData));
|
|
|
|
bytes += generator.feed(2);
|
|
bytes += generator.cut();
|
|
return bytes;
|
|
}
|
|
|
|
Future<List<int>> getReceiptImg(String paperSize) async {
|
|
final profile = await CapabilityProfile.load();
|
|
final generator = Generator(
|
|
paperSize == PrinterConst.paperSize58mm ? PaperSize.mm58 : PaperSize.mm80,
|
|
profile,
|
|
);
|
|
List<int> bytes = [];
|
|
final ByteData data =
|
|
await rootBundle.load('assets/images/aman_kassa_check.png');
|
|
final Uint8List imgBytes = data.buffer.asUint8List();
|
|
final Image? image = decodeImage(imgBytes);
|
|
// Using `ESC *`
|
|
bytes += generator.image(image!);
|
|
bytes += generator.feed(2);
|
|
bytes += generator.cut();
|
|
return bytes;
|
|
}
|
|
|
|
BluetoothDevice printerDeviceToBluetoothDevice(PrinterDevice device) {
|
|
return BluetoothDevice()
|
|
..name = device.name
|
|
..address = device.address
|
|
..connected = device.connected
|
|
..type = device.type;
|
|
}
|
|
|
|
PrinterDevice bluetoothDeviceToPrinterDevice(PrinterBluetooth device) {
|
|
return PrinterDevice()
|
|
..name = device.name
|
|
..address = device.address
|
|
..type = device.type;
|
|
}
|