requestHealthPermissions static method

Future<SpikePermissionsResult> requestHealthPermissions({
  1. required String connectionId,
  2. required List<String> types,
})

Implementation

static Future<SpikePermissionsResult> requestHealthPermissions({
  required String connectionId,
  required List<String> types,
}) async {
  if (!Platform.isAndroid) {
    return SpikePermissionsResult.undefined;
  }

  final prefs = await SharedPreferences.getInstance();
  final timesCancelled = prefs.getInt(_healthConnectCancelStorageKey) ?? 0;

  var checkResult = await checkPermissionsGranted(
    connectionId: connectionId,
    types: types,
  );

  if (checkResult == true) {
    return SpikePermissionsResult.granted;
  }

  if (timesCancelled >= _healthConnectCancelBlockTimes) {
    return SpikePermissionsResult.blocked;
  }

  final requestResult =
      await _channel.invokeMethod('requestHealthPermissions', {
    'connectionId': connectionId,
    'permissions': types.join(","),
  });

  if (requestResult == 'result_canceled_user') {
    await prefs.setInt(_healthConnectCancelStorageKey, timesCancelled + 1);
  }

  ExceptionHandler.checkException(requestResult);

  checkResult = await _channel.invokeMethod('checkPermissionsGranted', {
    'connectionId': connectionId,
    'permissions': types.join(","),
  });

  if (checkResult == true) {
    return SpikePermissionsResult.granted;
  }

  if (requestResult == 'result_ok') {
    return SpikePermissionsResult.grantedPartially;
  }

  return SpikePermissionsResult.canceled;
}