contains

Devuelve true cuando un iterable contiene un valor, comparado con ==.

bool Fx.contains(Object? a) // chain — inherited from Iterable (Dart idiom) bool includes<A>(A a, Iterable<A> iterable) // top-level: no `contains` (collides with package:test) Future<bool> includesAsync<A>(A a, FxAsyncIterable<A> iterable) // top-level async

Lección

contains es el nombre idiomático en Dart para comprobar la pertenencia, y en una cadena ya lo tienes: Fx hereda .contains() de Iterable, así que fx(xs).contains(a) funciona sin más. Eso sí, no existe una función contains de nivel superior — el nombre choca con el matcher de package:test —, de modo que la forma data-first conserva su grafía de FxTS, includes(a, iterable), que es literalmente iterable.contains(a). La versión asíncrona, includesAsync, está construida sobre someAsync (con b == a como predicado), lo que significa que hereda el mismo cortocircuito: deja de tirar de la fuente en cuanto encuentra una coincidencia.

La igualdad se comprueba con el == de Dart, así que respeta cualquier redefinición de operator == en tus propias clases — no se limita a los tipos primitivos.

Demo 1 · Fundamentos

Demo 2 · Async, y la prueba del cortocircuito

Solo se piden 2 de los 5 elementos antes de que includesAsync se detenga:

Pruébalo tú

Ejercicio: usa contains para comprobar si requestId está permitido.

Relacionado: some — la base sobre la que se construye includesAsync · find — obtén el valor coincidente, no solo un bool · findIndex — obtén la posición en su lugar · isEmpty — la otra comprobación basada en valores que tienes cerca