startHeartRateAcquisition method
override
心拍数の取得を開始
Implementation
@override
Future<void> startHeartRateAcquisition() async {
try {
final connectedDevice = state.connectedDevice;
// 未接続の場合
if (connectedDevice == null) {
throw HeartRateAdapterException(
AdapterErrorType.deviceNotConnected,
AdapterErrorType.deviceNotConnected.message,
HeartRateDeviceEventStreamErrorType.unknown,
);
}
// 利用可能なデータタイプを取得
final availabletypes = await _polar
.getAvailableOnlineStreamDataTypes(connectedDevice.deviceId);
// 心拍数が利用可能でない場合
if (!availabletypes.contains(PolarDataType.hr)) {
throw HeartRateAdapterException(
AdapterErrorType.libraryError,
AdapterErrorType.libraryError.message,
HeartRateDeviceEventStreamErrorType.unknown,
);
}
// 心拍数の取得を開始
_heartRateStreamSubscription =
_polar.startHrStreaming(connectedDevice.deviceId).listen((event) {
// ステートを更新
state = state.copyWith(isHeartRateAcquisitionStarted: true);
_deviceEventStreamController.add(HeartRateDeviceEvent.heartRate(
heartRateList: event.samples
.map((e) => HeartRateData(heartRate: e.hr, rrsMs: e.rrsMs))
.toList()));
}, onError: (error) {
_deviceEventStreamController.addError(HeartRateAdapterException(
AdapterErrorType.libraryError,
AdapterErrorType.libraryError.message,
HeartRateDeviceEventStreamErrorType.heartRateError,
detail: error));
});
} on HeartRateAdapterException catch (_) {
rethrow;
} catch (e) {
throw HeartRateAdapterException(
AdapterErrorType.libraryError,
AdapterErrorType.libraryError.message,
HeartRateDeviceEventStreamErrorType.unknown,
detail: e,
);
}
}