agregaDynamicValueInMap method

Future<void> agregaDynamicValueInMap({
  1. required Map<String, dynamic> data,
  2. required Map<String, Map<String, dynamic>> lstCamposConDataAdicional,
  3. Map<String, dynamic>? project,
  4. required Map<String, dynamic> esquema,
  5. bool propertyInArrayObject = true,
})

Implementation

Future<void> agregaDynamicValueInMap(
    {required Map<String, dynamic> data,
    required Map<String, Map<String, dynamic>> lstCamposConDataAdicional,
    Map<String, dynamic>? project,
    required Map<String, dynamic> esquema,
    bool propertyInArrayObject = true}) async {
  try {
    for (final campo in lstCamposConDataAdicional.entries) {
      final keys = FlutterUtilsProvider.descomponerKey(campo.key);
      dynamic dataKey;
      List<String> keysToAddDynamicValue = [];

      if (keys.length > 1) {
        (keysToAddDynamicValue, dataKey) =
            FlutterUtilsProvider.determinaEstructuraContenedoraDelKey(
                keys, data);
      } else {
        keysToAddDynamicValue = [keys.last];
        dataKey = data;
      }

      Future<void> updateItem(Map<String, dynamic> item) async {
        for (final key in keysToAddDynamicValue) {
          if (key != keysToAddDynamicValue.last) {
            if (!item.containsKey(key)) {
              ApiRest.logDebug(
                  'agregaDynamicValueInMap() El campo $key no existe en el mapa');
              return;
            }
            item = item[key];
          } else {
            if (item.containsKey(key)) {
              ///Obtengo unicamente la porcion del esquema que corresponde al campo
              ///esto es para utilizar el redex del campo si es que existe
              Map<String, dynamic> subesquemaItem =
                  FlutterUtilsProvider.obtenerEsquemaSegunKey(esquema, keys);
              dynamic descripcion = await _determinaDynamicValue(
                  esquemaItem: subesquemaItem,
                  vData: item[key],
                  dataAdicional: campo.value,
                  propertyInArrayObject: propertyInArrayObject,
                  project: project);
              if (descripcion is List) {
                descripcion = descripcion.join(' ');
              }
              item['$key${EnvironmentApiRest.dynamicValue}'] = descripcion;
            }
          }
        }
      }

      if (dataKey is List) {
        for (var item in dataKey) {
          if (item is Map<String, dynamic>) {
            await updateItem(item);
          }
        }
      } else if (dataKey is Map<String, dynamic>) {
        await updateItem(dataKey);
      } else {
        ApiRest.logDebug(
            'agregaDynamicValueInMap() dataKey=> $dataKey no es una lista o un mapa para agregar dynamicValue');
      }
    }
  } catch (error) {
    ApiRest.logDebug('Error en agregaDynamicValueInMap: $error');
  }
}