findDeviceByName static method

Future<BleDevice?> findDeviceByName(
  1. String deviceName, {
  2. Duration timeout = const Duration(seconds: 10),
})

Convenience method to scan and find a specific device by name

deviceName - Name of the device to find timeout - Maximum time to scan (defaults to 10 seconds)

Returns the first device found with the matching name, or null if not found

Implementation

static Future<BleDevice?> findDeviceByName(String deviceName,
    {Duration timeout = const Duration(seconds: 10)}) async {
  final completer = Completer<BleDevice?>();
  StreamSubscription<ScanEvent>? subscription;
  Timer? timeoutTimer;

  // Set up timeout
  timeoutTimer = Timer(timeout, () {
    subscription?.cancel();
    if (!completer.isCompleted) {
      completer.complete(null);
    }
    stopScan();
  });

  // Start scanning and listen for the device
  subscription = startScan(timeout: timeout).listen((event) {
    if (event.device.name == deviceName) {
      timeoutTimer?.cancel();
      subscription?.cancel();
      stopScan();
      if (!completer.isCompleted) {
        completer.complete(event.device);
      }
    }
  });

  return completer.future;
}