waitForConnection static method

Future<void> waitForConnection({
  1. Duration timeout = const Duration(seconds: 30),
})

Wait for successful connection with timeout

Convenience method that waits for a successful Classic Bluetooth connection.

Implementation

static Future<void> waitForConnection({
  Duration timeout = const Duration(seconds: 30),
}) async {
  final completer = Completer<void>();
  StreamSubscription<ClassicConnectionEvent>? subscription;
  Timer? timeoutTimer;

  // Set up timeout
  timeoutTimer = Timer(timeout, () {
    subscription?.cancel();
    if (!completer.isCompleted) {
      completer.completeError(BluetoothException('CONNECTION_TIMEOUT',
          'Connection timeout after ${timeout.inSeconds} seconds'));
    }
  });

  // Listen for connection events
  subscription = classicConnectionEvents.listen(
    (event) {
      if (event.isConnected) {
        timeoutTimer?.cancel();
        subscription?.cancel();
        if (!completer.isCompleted) {
          completer.complete();
        }
      } else if (event.isError) {
        timeoutTimer?.cancel();
        subscription?.cancel();
        if (!completer.isCompleted) {
          completer.completeError(BluetoothException('CONNECTION_ERROR',
              event.message ?? 'Unknown connection error'));
        }
      }
    },
    onError: (error) {
      timeoutTimer?.cancel();
      subscription?.cancel();
      if (!completer.isCompleted) {
        completer.completeError(error);
      }
    },
  );

  return completer.future;
}