actualizarValorCampo method

void actualizarValorCampo(
  1. List<String> keys,
  2. dynamic data,
  3. dynamic valor,
  4. Map<String, dynamic> esquema, [
  5. TipoDato? typeData,
])

Implementation

void actualizarValorCampo(List<String> keys, dynamic data, dynamic valor,
    Map<String, dynamic> esquema,
    [TipoDato? typeData]) {
  if (data == null || keys.isEmpty) return;
  final contieneIndice = keys.any((element) => int.tryParse(element) != null);
  try {
    for (int i = 0; i < keys.length; i++) {
      final key = keys[i];
      final index = int.tryParse(key);
      final ultimaKey = i == keys.length - 1;

      //Con esto evito que actulize un valor de un arrayObject sin tener el
      //indice de la lista
      if (!contieneIndice) {
        final propiedades = FlutterUtilsProvider.obtenerEsquemaSegunKey(
            esquema,
            FlutterUtilsProvider.estableceKeyParaEsquema(
                keys.sublist(0, i + 1)));
        final type = TypeEsquema.fromString(propiedades['type'] ?? '');
        if (type == TypeEsquema.arrayObjects) {
          return;
        }
      }

      // Si es el último key, actualiza el valor
      if (ultimaKey) {
        if (typeData == null) {
          final propiedades = FlutterUtilsProvider.obtenerEsquemaSegunKey(
              esquema, FlutterUtilsProvider.estableceKeyParaEsquema(keys));
          typeData = TipoDato.fromString(
              propiedades[CamposPropiedadEsquema.tipoDato.name] ?? '');
        }
        if (typeData == TipoDato.unKnown) break;
        valor = FlutterUtilsProvider.convierteValorSegunTipo(typeData, valor);

        if (index != null) {
          if (data[index] != null) {
            // Si el key es un índice de lista
            data[index] = valor;
          }
        } else {
          data[key] = valor;
        }
      } else {
        if (index == null) {
          if (data[key] == null) break;
          data = data[key];
        } else {
          if (data[index] == null) break;
          data = data[index];
        }
      }
    }
  } catch (error) {
    ApiRest.logDebug(
        'actualizarValorCampo $keys Error al actualizar el valor del campo: $error');
  }
}