connectAndWait static method

Future<bool> connectAndWait(
  1. String deviceAddress, {
  2. Duration timeout = const Duration(seconds: 30),
})

Convenience method to connect and wait for successful connection

deviceAddress - MAC address of the device to connect to timeout - Maximum time to wait for connection (defaults to 30 seconds)

Returns true if connection was successful, throws BleException on error

Implementation

static Future<bool> connectAndWait(String deviceAddress,
    {Duration timeout = const Duration(seconds: 30)}) async {
  final completer = Completer<bool>();
  StreamSubscription<ConnectionEvent>? subscription;
  Timer? timeoutTimer;

  // Set up timeout
  timeoutTimer = Timer(timeout, () {
    subscription?.cancel();
    if (!completer.isCompleted) {
      completer
          .completeError(BleException('Connection timeout', deviceAddress));
    }
  });

  // Start connection and listen for results
  subscription = connect(deviceAddress).listen((event) {
    if (event.isConnected) {
      timeoutTimer?.cancel();
      subscription?.cancel();
      if (!completer.isCompleted) {
        completer.complete(true);
      }
    } else if (event.isError) {
      timeoutTimer?.cancel();
      subscription?.cancel();
      if (!completer.isCompleted) {
        completer.completeError(BleException(
            event.message ?? 'Connection failed', deviceAddress));
      }
    }
  });

  return completer.future;
}