discoverPrinters static method

DiscoverResult<TcpPrinterInfo> discoverPrinters()

Implementation

static DiscoverResult<TcpPrinterInfo> discoverPrinters() async {
  String? deviceIp = await NetworkInfo().getWifiIP();
  if (deviceIp == null) return [];

  final String subnet = deviceIp.substring(0, deviceIp.lastIndexOf('.'));

  final List<Future<PrinterDiscovered<TcpPrinterInfo>>> results =
      List.generate(255, (index) async {
    final host = '$subnet.$index';
    try {
      final _socket =
          await Socket.connect(host, 9100, timeout: Duration(seconds: 5));
      _socket.destroy();
      return PrinterDiscovered<TcpPrinterInfo>(
          name: host,
          detail: TcpPrinterInfo(address: _socket.address),
          exist: true);
    } catch (err) {
      return PrinterDiscovered(
          name: host,
          detail: TcpPrinterInfo(address: InternetAddress(host)),
          exist: false);
    }
  });
  final discovered = await Future.wait(results);
  return discovered.where((r) => r.exist).toList();
}