connectToDevice method

  1. @override
Future<void> connectToDevice(
  1. {required HeartRateDeviceInfo deviceInfo}
)
override

デバイスと接続する

Implementation

@override
Future<void> connectToDevice(
    {required HeartRateDeviceInfo deviceInfo}) async {
  try {
    // 接続されているデバイスがある場合
    if (state.connectedDevice != null) {
      throw HeartRateAdapterException(
        AdapterErrorType.deviceAlreadyConnected,
        AdapterErrorType.deviceAlreadyConnected.message,
        HeartRateDeviceEventStreamErrorType.unknown,
      );
    }
    // デバイスとの接続
    await _polar.connectToDevice(deviceInfo.deviceId,
        requestPermissions: false);

    // デバイスとの接続中のイベントのストリームを開始
    _deviceConnectingStreamSubscription =
        _polar.deviceConnecting.listen((event) {
      _deviceEventStreamController.add(
        HeartRateDeviceEvent.connecting(
          deviceInfo: HeartRateDeviceInfo(
            deviceId: event.deviceId,
            address: event.address,
            rssi: event.rssi,
            name: event.name,
          ),
        ),
      );
    }, onError: (error) {
      _deviceEventStreamController.addError(HeartRateAdapterException(
          AdapterErrorType.libraryError,
          AdapterErrorType.libraryError.message,
          HeartRateDeviceEventStreamErrorType.connectingError,
          detail: error));
    });

    // デバイスとの接続完了のイベントのストリームを開始
    _deviceConnectedStreamSubscription =
        _polar.deviceConnected.listen((event) async {
      final connectedDevice = HeartRateDeviceInfo(
        deviceId: event.deviceId,
        address: event.address,
        rssi: event.rssi,
        name: event.name,
      );
      state = state.copyWith(connectedDevice: connectedDevice);

      // sdkFeatureReadyのイベントを待つ
      await _polar.sdkFeatureReady.firstWhere(
        (e) =>
            e.identifier == connectedDevice.deviceId &&
            e.feature == PolarSdkFeature.onlineStreaming,
      );

      _deviceEventStreamController.add(
        HeartRateDeviceEvent.connected(
          deviceInfo: HeartRateDeviceInfo(
            deviceId: event.deviceId,
            address: event.address,
            rssi: event.rssi,
            name: event.name,
          ),
        ),
      );
    }, onError: (error) {
      _deviceEventStreamController.addError(HeartRateAdapterException(
          AdapterErrorType.libraryError,
          AdapterErrorType.libraryError.message,
          HeartRateDeviceEventStreamErrorType.connectedError,
          detail: error));
    });
  } on HeartRateAdapterException catch (_) {
    rethrow;
  } catch (error) {
    throw HeartRateAdapterException(
        AdapterErrorType.libraryError,
        AdapterErrorType.libraryError.message,
        HeartRateDeviceEventStreamErrorType.unknown,
        detail: error);
  }
}