evolve

Pasa los valores seleccionados por funciones de transformación asociadas a cada clave, dejando el resto del Map tal cual.

Map<K, Object?> evolve<K>( Map<K, Object? Function(Object? value)> transformations, Map<K, Object?> map)

Lección

evolve recibe un map de «receta» —clave a función de transformación— y un map de datos, y produce un map nuevo en el que cada clave que aparece en la receta pasa su valor por la función correspondiente; el resto de las claves se copian sin cambios.

Fíjate en que la firma es deliberadamente laxa: ambos maps están tipados con valores Object?, reflejando el original de FxTS con tipado dinámico. Eso significa que tus funciones de transformación reciben Object? y deben hacer un cast (v as String, v as int, …) antes de hacer nada específico de un tipo: un pequeño peaje a cambio de la flexibilidad de aplicar transformaciones distintas a tipos de valor distintos dentro de un mismo map. Si conoces de antemano la forma de tus datos y no necesitas esa heterogeneidad por clave, un simple spread {...map, 'key': f(map['key'])} suele ser Dart más idiomático; recurre a evolve cuando la propia receta sea datos (por ejemplo, construida una vez y reutilizada en muchos maps).

Demo 1 · Fundamentos

Demo 2 · Parsear campos de texto en crudo

Pruébalo tú

Ejercicio: usa evolve para duplicar el campo 'price' y dejar 'title' intacto.

Relacionado: prop — leer un único valor · omitBy — descartar entradas en lugar de transformarlas · compactObject — una pasada de limpieza especializada · resolveProps — el primo asíncrono, que espera en lugar de transformar