refreshItem method
Future<NsgDataItem>
refreshItem(
- NsgDataItem item,
- List<
String> ? referenceList, { - 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;
}