From 2ff639fc42f65f4f7f70a613875f95664441e918 Mon Sep 17 00:00:00 2001 From: Phuoc Nguyen Date: Tue, 4 Nov 2025 18:10:54 +0700 Subject: [PATCH] sunmi --- ios/Podfile.lock | 10 +- lib/core/services/sunmi_service.dart | 135 ++++++++++++++++++--------- 2 files changed, 96 insertions(+), 49 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 11941d9..60650de 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -38,11 +38,11 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467 - flutter_secure_storage: 1ed9476fba7e7a782b22888f956cce43e2c62f13 - mobile_scanner: 9157936403f5a0644ca3779a38ff8404c5434a93 - path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564 - printing: 54ff03f28fe9ba3aa93358afb80a8595a071dd07 - sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0 + flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12 + mobile_scanner: 77265f3dc8d580810e91849d4a0811a90467ed5e + path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 + printing: 233e1b73bd1f4a05615548e9b5a324c98588640b + sqflite_darwin: 5a7236e3b501866c1c9befc6771dfd73ffb8702d PODFILE CHECKSUM: 3c63482e143d1b91d2d2560aee9fb04ecc74ac7e diff --git a/lib/core/services/sunmi_service.dart b/lib/core/services/sunmi_service.dart index 4f2e64f..81aac4a 100644 --- a/lib/core/services/sunmi_service.dart +++ b/lib/core/services/sunmi_service.dart @@ -21,39 +21,42 @@ class SunmiService { String? barcodeData, }) async { try { - // Check if printer is bound - final bool? isBound = await SunmiPrinter.bindingPrinter(); - if (isBound != true) { - throw Exception('Sunmi printer not available'); - } - // Format current date final dt = DateFormat('dd/MM/yyyy HH:mm').format(DateTime.now()); - // Reset printer - await SunmiPrinter.initPrinter(); - await SunmiPrinter.resetFontSize(); - // Title - PHIẾU XUẤT KHO - await SunmiPrinter.setAlignment(SunmiPrintAlign.CENTER); - await SunmiPrinter.bold(); - await SunmiPrinter.setCustomFontSize(30); - await SunmiPrinter.printText('PHIEU XUAT KHO'); - await SunmiPrinter.resetBold(); - await SunmiPrinter.setCustomFontSize(24); + await SunmiPrinter.printText( + 'PHIEU XUAT KHO', + style: SunmiTextStyle( + align: SunmiPrintAlign.CENTER, + bold: true, + fontSize: 48, + ), + ); await SunmiPrinter.lineWrap(1); // Company name - await SunmiPrinter.printText('Cong ty TNHH Co Khi Chinh Xac Minh Thu'); - await SunmiPrinter.resetFontSize(); + await SunmiPrinter.printText( + 'Cong ty TNHH Co Khi Chinh Xac Minh Thu', + style: SunmiTextStyle( + align: SunmiPrintAlign.CENTER, + fontSize: 32, + ), + ); await SunmiPrinter.lineWrap(1); // Warehouse name - await SunmiPrinter.printText(warehouseName); + await SunmiPrinter.printText( + warehouseName, + style: SunmiTextStyle(align: SunmiPrintAlign.CENTER), + ); await SunmiPrinter.lineWrap(1); // Date - await SunmiPrinter.printText('Ngay: $dt'); + await SunmiPrinter.printText( + 'Ngay: $dt', + style: SunmiTextStyle(align: SunmiPrintAlign.CENTER), + ); await SunmiPrinter.lineWrap(2); // Separator line @@ -61,26 +64,41 @@ class SunmiService { await SunmiPrinter.lineWrap(1); // Product information - await SunmiPrinter.setAlignment(SunmiPrintAlign.LEFT); - await SunmiPrinter.bold(); - await SunmiPrinter.printText('THONG TIN SAN PHAM'); - await SunmiPrinter.resetBold(); + await SunmiPrinter.printText( + 'THONG TIN SAN PHAM', + style: SunmiTextStyle( + align: SunmiPrintAlign.LEFT, + bold: true, + ), + ); await SunmiPrinter.lineWrap(1); // ProductId - await SunmiPrinter.printText('ProductId: $productId'); + await SunmiPrinter.printText( + 'ProductId: $productId', + style: SunmiTextStyle(align: SunmiPrintAlign.LEFT), + ); await SunmiPrinter.lineWrap(1); // Product Code - await SunmiPrinter.printText('Ma san pham: $productCode'); + await SunmiPrinter.printText( + 'Ma san pham: $productCode', + style: SunmiTextStyle(align: SunmiPrintAlign.LEFT), + ); await SunmiPrinter.lineWrap(1); // Product Name - await SunmiPrinter.printText('Ten san pham: $productName'); + await SunmiPrinter.printText( + 'Ten san pham: $productName', + style: SunmiTextStyle(align: SunmiPrintAlign.LEFT), + ); await SunmiPrinter.lineWrap(1); // Stage Name - await SunmiPrinter.printText('Cong doan: ${stageName ?? '-'}'); + await SunmiPrinter.printText( + 'Cong doan: ${stageName ?? '-'}', + style: SunmiTextStyle(align: SunmiPrintAlign.LEFT), + ); await SunmiPrinter.lineWrap(2); // Separator line @@ -88,23 +106,37 @@ class SunmiService { await SunmiPrinter.lineWrap(1); // Quantities - await SunmiPrinter.bold(); - await SunmiPrinter.printText('SO LUONG'); - await SunmiPrinter.resetBold(); + await SunmiPrinter.printText( + 'SO LUONG', + style: SunmiTextStyle( + align: SunmiPrintAlign.LEFT, + bold: true, + ), + ); await SunmiPrinter.lineWrap(1); // Table header - await SunmiPrinter.setAlignment(SunmiPrintAlign.LEFT); - await SunmiPrinter.printText('Loai KG PCS'); + await SunmiPrinter.printText( + 'Loai KG PCS', + style: SunmiTextStyle(align: SunmiPrintAlign.LEFT), + ); await SunmiPrinter.line(); // Passed quantity (Hàng đạt) - final passedLine = 'Hang dat ${passedKg.toStringAsFixed(2).padLeft(7)} ${passedPcs.toString().padLeft(5)}'; - await SunmiPrinter.printText(passedLine); + final passedLine = + 'Hang dat ${passedKg.toStringAsFixed(2).padLeft(7)} ${passedPcs.toString().padLeft(5)}'; + await SunmiPrinter.printText( + passedLine, + style: SunmiTextStyle(align: SunmiPrintAlign.LEFT), + ); // Issued quantity (Hàng lỗi) - final issuedLine = 'Hang loi ${issuedKg.toStringAsFixed(2).padLeft(7)} ${issuedPcs.toString().padLeft(5)}'; - await SunmiPrinter.printText(issuedLine); + final issuedLine = + 'Hang loi ${issuedKg.toStringAsFixed(2).padLeft(7)} ${issuedPcs.toString().padLeft(5)}'; + await SunmiPrinter.printText( + issuedLine, + style: SunmiTextStyle(align: SunmiPrintAlign.LEFT), + ); await SunmiPrinter.lineWrap(2); // Separator line @@ -112,29 +144,44 @@ class SunmiService { await SunmiPrinter.lineWrap(1); // Responsible person - await SunmiPrinter.printText('Nhan vien kho: ${responsibleName ?? '-'}'); + await SunmiPrinter.printText( + 'Nhan vien kho: ${responsibleName ?? '-'}', + style: SunmiTextStyle(align: SunmiPrintAlign.LEFT), + ); await SunmiPrinter.lineWrap(1); // Receiver - await SunmiPrinter.printText('Nhan vien tiep nhan: ${receiverName ?? '-'}'); + await SunmiPrinter.printText( + 'Nhan vien tiep nhan: ${receiverName ?? '-'}', + style: SunmiTextStyle(align: SunmiPrintAlign.LEFT), + ); await SunmiPrinter.lineWrap(2); // Barcode if (barcodeData != null && barcodeData.isNotEmpty) { await SunmiPrinter.line(); - await SunmiPrinter.setAlignment(SunmiPrintAlign.CENTER); - await SunmiPrinter.printBarCode(barcodeData); + await SunmiPrinter.printBarCode( + barcodeData, + style: SunmiBarcodeStyle( + type: SunmiBarcodeType.CODE128, + textPos: SunmiBarcodeTextPos.TEXT_UNDER, + height: 100, + align: SunmiPrintAlign.CENTER, + ), + ); await SunmiPrinter.lineWrap(2); } // Footer await SunmiPrinter.line(); - await SunmiPrinter.setAlignment(SunmiPrintAlign.CENTER); - await SunmiPrinter.printText('Nguoi nhan'); + await SunmiPrinter.printText( + 'Nguoi nhan', + style: SunmiTextStyle(align: SunmiPrintAlign.CENTER), + ); await SunmiPrinter.lineWrap(4); // Cut paper - await SunmiPrinter.cut(); + await SunmiPrinter.cutPaper(); // Show success message if (context.mounted) {