requestItem method

Future<T> requestItem({
  1. NsgDataRequestParams? filter,
  2. bool autoAuthorize = true,
  3. String tag = '',
  4. List<String>? loadReference,
  5. String function = '',
  6. String method = 'GET',
  7. bool addCount = true,
  8. dynamic postData,
  9. bool autoRepeate = false,
  10. int autoRepeateCount = 1000,
  11. FutureOr<bool> retryIf(
    1. Exception
    )?,
  12. FutureOr<void> onRetry(
    1. Exception
    )?,
  13. NsgCancelToken? cancelToken,
})

Оснорвной метод запроса данных Выполняет запрос по стандартному методу, заданному в объекте Можно перекрыть для изменения логики запроса filter = доп. фильтр, особенное внимание следует обратить на его сво-во compare autoAuthorize - переход на авторизацию, если будет получен отказ в доступе tag - доп признак для кэширования loadReference - список полей для дочитывания, можно передавать через точку, null - будут дочитаны все поля ссылочного типа первого уровн, пустой массив - не будет дочитано ничего Обратите внимание, по умолчанию дочитываются все поля, что может негативно сказаться на производительности function - url вызываемого метода, если не задан, будет взят url данного объекта по умолчанию method - метод запроса. Рекомендуем всегда использовать POST из-за отсутствия ограничений на передаваемые параметры addCount - в фильтр будет добавлено ограничение считываемых объектов до одного postData - передаваемые данные. Не рекомендуется использовать напрямую autoRepeate - повторять ли запрос в случае ошибки связи autoRepeateCount - максимальное количество повторов retryIf - функция, вызываемая перед каждым повторным вызовом. Если вернет false, повторы будут остановлены onRetry - функция, вызываемая при каждом повторе запроса requestRegime - режим запроса. Позволяет определить для чего загружаются данные при перекрытии логики данного метода

Implementation

Future<T> requestItem(
    {NsgDataRequestParams? filter,
    bool autoAuthorize = true,
    String tag = '',
    List<String>? loadReference,
    String function = '',
    String method = 'GET',
    bool addCount = true,
    dynamic postData,
    bool autoRepeate = false,
    int autoRepeateCount = 1000,
    FutureOr<bool> Function(Exception)? retryIf,
    FutureOr<void> Function(Exception)? onRetry,
    NsgCancelToken? cancelToken}) async {
  NsgDataRequestParams? newFilter;
  if (addCount) {
    if (filter == null) {
      newFilter = NsgDataRequestParams(count: 1);
    } else {
      newFilter = NsgDataRequestParams(
          top: filter.top, count: 1, params: filter.params, sorting: filter.sorting, referenceList: filter.referenceList, compare: filter.compare);
    }
  }
  var data = await requestItems(
      filter: newFilter,
      autoAuthorize: autoAuthorize,
      tag: tag,
      loadReference: loadReference,
      function: function,
      method: method,
      postData: postData,
      autoRepeate: autoRepeate,
      autoRepeateCount: autoRepeateCount,
      userRetryIf: _retryIfInternal,
      userOnRetry: onRetry,
      cancelToken: cancelToken);
  if (data.isEmpty) {
    return NsgDataClient.client.getNewObject(dataItemType) as T;
  }
  return data[0];
}