disconnectFromDevice method

  1. @override
Future<void> disconnectFromDevice()
override

デバイスとの切断

Implementation

@override
Future<void> disconnectFromDevice() async {
  try {
    final connectedDevice = state.connectedDevice;
    // 接続されているデバイスがない場合
    if (connectedDevice == null) {
      throw HeartRateAdapterException(
        AdapterErrorType.deviceNotConnected,
        AdapterErrorType.deviceNotConnected.message,
        HeartRateDeviceEventStreamErrorType.unknown,
      );
    }
    // 心拍数の取得を停止
    await stopHeartRateAcquisition();
    // ECGの取得を停止
    await stopEcgAcquisition();
    // バッテリーレベルの取得を停止
    await stopBatteryLevelAcquisition();
    await _polar.disconnectFromDevice(connectedDevice.deviceId);
    _deviceDisconnectedStreamSubscription =
        _polar.deviceDisconnected.listen((event) async {
      // stateを初期化
      state = state.copyWith(connectedDevice: null);
      _deviceEventStreamController.sink.add(
        HeartRateDeviceEvent.disconnect(
          deviceDisconnectedEvent: HeartRateDeviceDisconnectedEvent(
            deviceInfo: HeartRateDeviceInfo(
              deviceId: event.info.deviceId,
              address: event.info.address,
              rssi: event.info.rssi,
              name: event.info.name,
            ),
            pairingError: event.pairingError,
          ),
        ),
      );
      // デバイスとのイベントストリームをキャンセル
      _cancel();
    }, onError: (error) {
      _deviceEventStreamController.addError(HeartRateAdapterException(
          AdapterErrorType.libraryError,
          AdapterErrorType.libraryError.message,
          HeartRateDeviceEventStreamErrorType.disconnectError,
          detail: error));
      _cancel();
    });
  } on HeartRateAdapterException catch (_) {
    rethrow;
  } catch (e) {
    throw HeartRateAdapterException(
        AdapterErrorType.libraryError,
        AdapterErrorType.libraryError.message,
        HeartRateDeviceEventStreamErrorType.unknown,
        detail: e);
  }
}