evolve
Pasa los valores seleccionados por funciones de transformación asociadas a cada clave, dejando el resto del Map tal cual.
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.
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