requestItem method

Future<T?> requestItem({
  1. required NsgDataProvider provider,
  2. required String function,
  3. NsgDataRequestParams? filter,
  4. bool autoAuthorize = true,
  5. String tag = '',
  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({
  required NsgDataProvider provider,
  required String function,
  NsgDataRequestParams? filter,
  bool autoAuthorize = true,
  String tag = '',
  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(
    provider: provider,
    filter: newFilter,
    autoAuthorize: autoAuthorize,
    tag: tag,
    function: function,
    method: method,
    postData: postData,
    autoRepeate: autoRepeate,
    autoRepeateCount: autoRepeateCount,
    retryIf: retryIf,
    onRetry: onRetry,
    cancelToken: cancelToken,
  );
  if (data.isEmpty) {
    return null;
  }
  return data[0];
}