writeBytes method

  1. @override
Future writeBytes(
  1. List<int> data, {
  2. int? vendorId,
  3. int? productId,
})
override

Implementation

@override
Future writeBytes(List<int> data, {int? vendorId, int? productId}) async {
  if (Platform.isWindows) {
    await connect();

    // Inform the spooler the document is beginning.
    final dwJob = StartDocPrinter(hPrinter, 1, docInfo!);
    if (dwJob == 0) {
      ClosePrinter(hPrinter);
    }
    // Start a page.
    if (StartPagePrinter(hPrinter) == 0) {
      EndDocPrinter(hPrinter);
      ClosePrinter(hPrinter);
    }

    // Send the data to the printer.
    final lpData = data.toUint8();
    dwCount = data.length;
    if (WritePrinter(hPrinter, lpData, dwCount!, dwBytesWritten!) == 0) {
      EndPagePrinter(hPrinter);
      EndDocPrinter(hPrinter);
      ClosePrinter(hPrinter);
    }

    // End the page.
    if (EndPagePrinter(hPrinter) == 0) {
      EndDocPrinter(hPrinter);
      ClosePrinter(hPrinter);
    }

    // Inform the spooler that the document is ending.
    if (EndDocPrinter(hPrinter) == 0) {
      ClosePrinter(hPrinter);
    }

    // Check to see if correct number of bytes were written.
    if (dwBytesWritten!.value != dwCount) {}

    // Tidy up the printer handle.
    ClosePrinter(hPrinter);
    // await disconnect();
  } else if (Platform.isAndroid) {
    try {
      await connect();

      var bytes = Uint8List.fromList(data);

      int max = 16384;

      /// maxChunk limit on android
      var datas = bytes.chunkBy(max);
      for (var data in datas) {
        await usbPrinter.write(Uint8List.fromList(data));
      }

      await usbPrinter.close();
    } catch (e) {
      return Future.error(e.toString());
    }
  }
}