fromJsonList method
Implementation
List<T> fromJsonList(List<dynamic> maps) {
var items = <T>[];
for (var m in maps) {
var elem = NsgDataClient.client.getNewObject(referentElementType);
if (m is Map<String, dynamic>) {
elem.fromJson(m);
//этот признак определфет то что строка пришла из БД, без него она не удалится из базы данных
//Другое дело, возможно, надо различать зачем мы проводим десериализацию
//или присто отправлять на удаление с сервера все строки, удаляемые на объекте, независимо от того что они помечены как загруженные с сервера
//Сервер их проигнорирует. В противном случае, удаление строки из табличной части не будет работать
elem.docState = NsgDataItemDocState.saved;
if (elem.allowExtend) {
var extTypeName = elem[elem.extensionTypeField].toString();
if (extTypeName.isNotEmpty && extTypeName != elem.typeName) {
try {
elem = NsgDataClient.client.getNewObject(NsgDataClient.client.getTypeByServerName(extTypeName));
elem.fromJson(m);
} on AssertionError catch (ex) {
if (ex.message == extTypeName) {
debugPrint('Unknown type $extTypeName');
} else {
rethrow;
}
}
}
}
} else if (m.runtimeType == referentElementType) {
elem.copyFieldValues(m);
} else if (m is String) {
elem.id = m;
} else {
throw Exception("Exception ReferenceListField 65. Unknown value type");
}
var dublicate = false;
for (var item in items) {
if (item.isNotEmpty && item.id == elem.id) {
debugPrint('ОШИБКА RLF-62: дубликат строки в таб. части');
dublicate = true;
break;
}
}
if (!dublicate) {
items.add(elem as T);
}
}
return items;
}