disconnectFromDevice method
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);
}
}