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