connectToDevice method

Future<void> connectToDevice(
  1. String deviceId
)

Implementation

Future<void> connectToDevice(String deviceId) async {
  if (!_isInitialized) {
    throw Exception(
        'DeviceManager not initialized. Call initialize() first.');
  }

  if (_connectionState == DeviceConnectionState.connecting) {
    throw Exception('Connection already in progress');
  }
  if (_connectionState == DeviceConnectionState.connected) {
    throw Exception('Device already connected. Disconnect first.');
  }

  _updateConnectionState(DeviceConnectionState.connecting);

  try {
    _connectedDevice = BluetoothDevice.fromId(deviceId);

    _connectionStateSubscription?.cancel();
    _connectionStateSubscription =
        _connectedDevice!.connectionState.listen((state) {
      if (state == BluetoothConnectionState.disconnected &&
          _connectionState == DeviceConnectionState.connected) {
        _updateConnectionState(DeviceConnectionState.disconnected);
      }
    });

    await _connectedDevice!.connect();

    if (Platform.isAndroid &&
        _connectedDevice!.mtuNow < DeviceConstants.defaultMtuSize) {
      await _connectedDevice!.requestMtu(DeviceConstants.defaultMtuSize);
    }

    _updateConnectionState(DeviceConnectionState.connected);
  } catch (e) {
    _connectedDevice = null;
    _updateConnectionState(DeviceConnectionState.error);
    rethrow;
  }
}