fromJsonList method

List<T> fromJsonList(
  1. List maps
)

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;
}