From 9e4e2ebbd1e7bfd1ae09e8f977a284d5efb106b2 Mon Sep 17 00:00:00 2001 From: Efril Date: Sun, 26 Apr 2026 22:15:50 +0700 Subject: [PATCH] fix printer fc --- .../repositories/printer_repository.dart | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/infrastructure/printer/repositories/printer_repository.dart b/lib/infrastructure/printer/repositories/printer_repository.dart index 3e8236c..779d430 100644 --- a/lib/infrastructure/printer/repositories/printer_repository.dart +++ b/lib/infrastructure/printer/repositories/printer_repository.dart @@ -31,6 +31,7 @@ class PrinterRepository implements IPrinterRepository { ); final Map _locks = {}; + final Lock _globalPrintLock = Lock(); String? _connectedMac; Lock _getLock(String address) { @@ -454,6 +455,7 @@ class PrinterRepository implements IPrinterRepository { Future> printStruckOrder({ required Order order, }) async { + return await _globalPrintLock.synchronized(() async { try { final outlet = await _outletLocalDatasource.currentOutlet(); final user = await _authLocalDataProvider.currentUser(); @@ -526,12 +528,14 @@ class PrinterRepository implements IPrinterRepository { const PrinterFailure.dynamicErrorMessage('Error printing order'), ); } + }); // end _globalPrintLock.synchronized } @override Future> printStruckSaveOrder({ required Order order, }) async { + return await _globalPrintLock.synchronized(() async { try { final outlet = await _outletLocalDatasource.currentOutlet(); final user = await _authLocalDataProvider.currentUser(); @@ -595,42 +599,51 @@ class PrinterRepository implements IPrinterRepository { const PrinterFailure.dynamicErrorMessage('Error printing save order'), ); } + }); // end _globalPrintLock.synchronized } @override Future> printStruckCashier({ required Order order, }) async { + return await _globalPrintLock.synchronized(() async { final outlet = await _outletLocalDatasource.currentOutlet(); final user = await _authLocalDataProvider.currentUser(); return _printCashier(order: order, outlet: outlet, cashieName: user.name); + }); } @override Future> printStruckVoid({ required Order order, }) async { + return await _globalPrintLock.synchronized(() async { final outlet = await _outletLocalDatasource.currentOutlet(); final user = await _authLocalDataProvider.currentUser(); return _printVoid(order: order, outlet: outlet, cashieName: user.name); + }); } @override Future> printStruckSplitBill({ required Order order, }) async { + return await _globalPrintLock.synchronized(() async { final outlet = await _outletLocalDatasource.currentOutlet(); final user = await _authLocalDataProvider.currentUser(); return _printSplitBill(order: order, outlet: outlet, cashieName: user.name); + }); } @override Future> printStruckPayment({ required Order order, }) async { + return await _globalPrintLock.synchronized(() async { final outlet = await _outletLocalDatasource.currentOutlet(); final user = await _authLocalDataProvider.currentUser(); return _printReceipt(order: order, outlet: outlet, cashieName: user.name); + }); } Future> _printReceipt({ @@ -1040,7 +1053,7 @@ class PrinterRepository implements IPrinterRepository { final chunk = data.sublist(i, end); bool result = await PrintBluetoothThermal.writeBytes(chunk); if (!result) return false; - await Future.delayed(const Duration(milliseconds: 30)); + await Future.delayed(const Duration(milliseconds: 100)); } return true; } @@ -1049,26 +1062,32 @@ class PrinterRepository implements IPrinterRepository { Future> printStruckBar({ required Order order, }) async { + return await _globalPrintLock.synchronized(() async { final outlet = await _outletLocalDatasource.currentOutlet(); final user = await _authLocalDataProvider.currentUser(); return _printBar(order: order, outlet: outlet, cashieName: user.name); + }); } @override Future> printStruckChecker({ required Order order, }) async { + return await _globalPrintLock.synchronized(() async { final outlet = await _outletLocalDatasource.currentOutlet(); final user = await _authLocalDataProvider.currentUser(); return _printChecker(order: order, outlet: outlet, cashieName: user.name); + }); } @override Future> printStruckKitchen({ required Order order, }) async { + return await _globalPrintLock.synchronized(() async { final outlet = await _outletLocalDatasource.currentOutlet(); final user = await _authLocalDataProvider.currentUser(); return _printKitchen(order: order, outlet: outlet, cashieName: user.name); + }); } }