refreshItem method

Future<NsgDataItem> refreshItem(
  1. NsgDataItem item,
  2. List<String>? referenceList, {
  3. bool changeStatus = false,
})

Перечитать указанный объект из базы данных item - перечитываемый объект referenceList - ссылки для дочитывания. Если передан null - будут дочитаны все Одно из применений, перечитывание объекта с целью чтения его табличных частей при переходе из формы списка в форму элемента changeStatus - выставить статус контроллера в success после обновления элемента

Implementation

Future<NsgDataItem> refreshItem(NsgDataItem item, List<String>? referenceList, {bool changeStatus = false}) async {
  assert(item.runtimeType == dataType, '$dataType.refreshItem. item is ${item.runtimeType}');
  //Если у элемента нет ID, то читать его из БД нет смысла
  //Возможно, лучше выдавть ошибку, но пока просто проигнорируем
  //Ошибка стабильно проявлялась при нажатии назад в матче приложения футболист
  if (item.id.isEmpty || item.state == NsgDataItemState.create) {
    _setSuccesfullStatus(changeStatus);
    return item;
  }
  referenceList ??= referenceItemPage;
  var cmp = NsgCompare();
  cmp.add(name: item.primaryKeyField, value: item.getFieldValue(item.primaryKeyField));
  var filterParam = NsgDataRequestParams(compare: cmp, referenceList: referenceList);
  var request = NsgDataRequest(dataItemType: dataType, storageType: controllerMode.storageType);
  filterParam.showDeletedObjects = true;
  var answer = await request.requestItem(
    filter: filterParam,
    loadReference: referenceList,
    autoRepeate: autoRepeate,
    autoRepeateCount: autoRepeateCount,
    retryIf: (e) => retryRequestIf(e),
  );
  assert(answer.isNotEmpty, 'Element not found (possibly marked for deletion)');
  // assert(answer.isNotEmpty, 'Элемент не найден (возможно помечен на удаление)');
  //Если в items (он же dataItemList) данный элемент уже присутствует, обновляем его новой версией
  if (dataItemList.contains(answer)) {
    var index = dataItemList.indexOf(answer);
    dataItemList[index] = answer;
    //dataItemList.replaceRange(index, index + 1, [answer]);
  }
  _setSuccesfullStatus(changeStatus);

  return answer;
}