ADR-003: Compatibilidad con equatable 2.x y 3.x
Estado: Aceptado para la 3.0.1
Fecha: 2026-10-16
Se relaciona con: ADR-001 (D21). Reemplaza la parte de equatable de D21; la
parte de state_notifier se mantiene.
Contexto
Sección titulada «Contexto»pub.dev puntúa si todas las dependencias de un paquete admiten sus últimas
versiones. equatable: ^2.0.5 excluía la 3.0.0 (publicada el 2026-09-15). D21
mantuvo la 2.x porque se creía que la 3.0.0 dejaba de comparar runtimeType, lo
que haría iguales a dos clases de estado distintas con props iguales y omitiría
su transición.
Decisión
Sección titulada «Decisión»Declarar equatable: '>=2.0.5 <4.0.0'. JState y JEquatable siguen extendiendo
la clase Equatable, así que la igualdad de estado no cambia.
Evidencia (verificada el 2026-10-16)
Sección titulada «Evidencia (verificada el 2026-10-16)»- La clase
Equatablede la 3.0.0 sigue comparandoruntimeTypeen==y lo usa enhashCode. Su changelog indica la eliminación deEquatableMixin, que JIntent no usa. La premisa de D21 fue una mala lectura de ese changelog. - Una prueba con la 3.0.0 resuelta: los estados
InitialyLoadingconpropsvacías no son iguales, yupdatede uno a otro notifica a los listeners. La misma prueba pasa con la 2.x. Ahora forma parte detest/src/core/jstate_test.dart. - Las pruebas de la librería y el analizador pasan en Flutter 3.29.2 y 3.47.6 con
equatable3.0.0 y con la versión mínima permitida, 2.0.5.
Consecuencias
Sección titulada «Consecuencias»- Las aplicaciones con
equatable2.x siguen funcionando, y las que usan la 3.x ahora pueden resolver JIntent. - Una aplicación que mezcla
EquatableMixinen sus propias clases debe migrar ese código antes de pasar aequatable3.x. Eso es independiente de JIntent. - La igualdad de estado la define
equatable. La prueba de regresión falla si una versión futura cambia cómo se comparan clases de estado distintas.