Cambio en TestWidgetsFlutterBinding.clock
La implementación de Clock ahora viene de package:clock.
Resumen
#El TestWidgetsFlutterBinding.clock ahora viene de
package:clock y no de package:quiver.
Contexto
#El paquete flutter_test está eliminando su dependencia del
paquete quiver más pesado en favor de una dependencia
en dos paquetes más específicos y ligeros,
clock y fake_async.
Esto puede afectar al código de usuario que obtiene el clock de un
TestWidgetsFlutterBinding y lo pasa a una API
que espera un Clock de package:quiver,
por ejemplo un código como este:
testWidgets('some test', (WidgetTester tester) {
someApiThatWantsAQuiverClock(tester.binding.clock);
});
Guía de migración
#El error que podrías ver después de este cambio se ve algo así:
Error: The argument type 'Clock/*1*/' can't be assigned to the parameter type 'Clock/*2*/'.
- 'Clock/*1*/' is from 'package:clock/src/clock.dart' ('<pub-cache>/clock/lib/src/clock.dart').
- 'Clock/*2*/' is from 'package:quiver/time.dart' ('<pub-cache>/quiver/lib/time.dart').
Opción #1: Crear un Clock de package:quiver a partir de un Clock de package:clock
#La migración más fácil es crear un clock de package:quiver a partir del
clock de package:clock, lo cual se puede hacer pasando el
tearoff de la función .now al constructor Clock:
Código antes de la migración:
testWidgets('some test', (WidgetTester tester) {
someApiThatWantsAQuiverClock(tester.binding.clock);
});
Código después de la migración:
testWidgets('some test', (WidgetTester tester) {
someApiThatWantsAQuiverClock(Clock(tester.binding.clock.now));
});
Opción #2: Cambiar la api para que acepte un Clock de package:clock
#Si eres dueño de la api que estás llamando,
quizás quieras cambiarla para que acepte un Clock
de package:clock.
Esta es una decisión subjetiva basada en cuántos lugares están
llamando a esta API con algo que no sea un clock
obtenido de un TestWidgetsFlutterBinding.
Si tomas este camino, no necesitarás modificar los puntos de llamada que pasan
tester.binding.clock,
pero otros puntos de llamada sí lo requerirán.
Opción #3: Cambiar la API para que acepte una función DateTime()
#
Si solo usas el Clock para su función now,
y controlas la API, también puedes cambiarla
para que acepte esa función directamente en lugar de un Clock.
Esto hace que sea fácil de llamar con cualquiera de los tipos de Clock,
pasando un tearoff del método now de cualquiera de los tipos de clock:
Código de llamada antes de la migración:
testWidgets('some test', (WidgetTester tester) {
someApiThatWantsAQuiverClock(tester.binding.clock);
});
Código de llamada después de la migración:
testWidgets('some test', (WidgetTester tester) {
modifiedApiThatTakesANowFunction(tester.binding.clock.now);
});
Timeline
#Introducido en la versión: 1.18.0
En la versión estable: 1.20
Referencias
#Documentación de la API:
PRs relevantes:
- PR 54125: eliminar la dependencia de quiver de flutter_test, usar fake_async y clock en su lugar
A menos que se indique lo contrario, la documentación de este sitio refleja Flutter 3.44.0. Página actualizada por última vez el 2026-05-05. Ver código fuente oreportar un problema.