diff --git a/lib/core/services/blue_print_service.dart b/lib/core/services/blue_print_service.dart index 32fed42..74936aa 100644 --- a/lib/core/services/blue_print_service.dart +++ b/lib/core/services/blue_print_service.dart @@ -114,6 +114,8 @@ class BluePrintService extends BaseService { } else if (isIos) { await _bluetoothDeviceIOS?.disconnect(); } + + print('disconnected'); response = true; } catch (e) { print('Error $e'); @@ -124,16 +126,30 @@ class BluePrintService extends BaseService { Future printBytes(Uint8List bytes, {int chunkSizeBytes = 20, int queueSleepTimeMs = 20}) async { - if (isAndroid) { - await _printAndroid(bytes, chunkSizeBytes, queueSleepTimeMs); - } else if (isIos) { - await _printIos(bytes); + Map config = Map(); + final len = bytes.length; + List> chunks = []; + for (var i = 0; i < len; i += chunkSizeBytes) { + var end = (i + chunkSizeBytes < len) ? i + chunkSizeBytes : len; + chunks.add(bytes.sublist(i, end)); } + for (var i = 0; i < chunks.length; i += 1) { + if (isAndroid) { + await _printAndroid(chunks[i], config); + } else if (isIos) { + await _printIos(Uint8List.fromList(chunks[i]), config); + } + + await Future.delayed(Duration(milliseconds: queueSleepTimeMs)); + } + + + return true; } - Future _printIos(Uint8List bytes) async { + Future _printIos(Uint8List bytes,Map config) async { final List bluetoothServices = await _bluetoothDeviceIOS?.discoverServices() ?? []; @@ -149,18 +165,9 @@ class BluePrintService extends BaseService { await characteristic.write(bytes, withoutResponse: true); } - Future _printAndroid(Uint8List bytes, int chunkSizeBytes, int queueSleepTimeMs) async { - Map config = Map(); - final len = bytes.length; - List> chunks = []; - for (var i = 0; i < len; i += chunkSizeBytes) { - var end = (i + chunkSizeBytes < len) ? i + chunkSizeBytes : len; - chunks.add(bytes.sublist(i, end)); - } - - for (var i = 0; i < chunks.length; i += 1) { - await _bluetoothAndr.rawBytes(config, chunks[i]); - await Future.delayed(Duration(milliseconds: queueSleepTimeMs)); - } + Future _printAndroid(List chunk ,Map config) async { + + + await _bluetoothAndr.rawBytes(config, chunk); } } diff --git a/lib/views/check/image_show_container.dart b/lib/views/check/image_show_container.dart index 3568aab..24401d6 100644 --- a/lib/views/check/image_show_container.dart +++ b/lib/views/check/image_show_container.dart @@ -61,6 +61,17 @@ class _ImageShowContainerState extends State { } } + @override + void dispose() { + disconnect(); + super.dispose(); + } + + + void disconnect() async { + await printerManager.disconnect(); + } + void _print() async { final SettingState state = Redux.store!.state.settingState!; if (state.printerBT == null) { @@ -107,7 +118,7 @@ class _ImageShowContainerState extends State { print(e); } await Future.delayed(Duration(seconds: 15)); - await printerManager.disconnect(); + setState(() { _printing = false; }); diff --git a/lib/views/settings/setting_printer_view.dart b/lib/views/settings/setting_printer_view.dart index 2316462..040e5b1 100644 --- a/lib/views/settings/setting_printer_view.dart +++ b/lib/views/settings/setting_printer_view.dart @@ -41,6 +41,15 @@ class _SettingPrinterViewState extends State { super.initState(); _permission(); } + @override + void dispose() { + disconnect(); + super.dispose(); + } + + disconnect() async { + await printerManager.disconnect(); + } void _testPrint() async { setState(() { @@ -49,12 +58,11 @@ class _SettingPrinterViewState extends State { try { final SettingState state = Redux.store!.state.settingState!; printerManager.device = state.printerBT!; - bool isConnected = await printerManager.connect(); - if(isConnected == false) { - await Future.delayed(Duration(seconds: 3)); - await printerManager.disconnect(); - return; - } + + await disconnect(); + await Future.delayed(Duration(seconds: 1)); + + await printerManager.connect(); await Future.delayed(Duration(seconds: 3)); bool isIos = Platform.isIOS; int chunkSizeBytes = 3096; @@ -77,14 +85,14 @@ class _SettingPrinterViewState extends State { Uint8List.fromList(await testTicketImage(paper)), chunkSizeBytes: chunkSizeBytes, queueSleepTimeMs: queueSleepTimeMs); - _dialogService.showDialog(description: 'result is $res'); + //_dialogService.showDialog(description: 'result is $res'); } else { final bool res = await printerManager.printBytes( Uint8List.fromList(await printTextCheck( paper, state.printerEncoding!, exampleJson['check_text'])), chunkSizeBytes: chunkSizeBytes, queueSleepTimeMs: queueSleepTimeMs); - _dialogService.showDialog(description: 'result is $res'); + //_dialogService.showDialog(description: 'result is $res'); } } catch (e) { print('ERROR'); @@ -92,8 +100,7 @@ class _SettingPrinterViewState extends State { } //10 sec safe disconnect await Future.delayed(Duration(seconds: 14)); - await printerManager.disconnect(); - await Future.delayed(Duration(seconds: 3)); + setState(() { _printing = false; });