Saltar al contenido principal

Cambiar el método enterText para mover el cursor al final del texto de entrada

WidgetTester.enterText y TestTextInput.enterText ahora mueven el cursor al final del texto de entrada.

Resumen

#

Los métodos WidgetTester.enterText y TestTextInput.enterText ahora mueven el cursor al final del texto de entrada.

Contexto

#

El cursor indica el punto de inserción dentro del texto actual en un campo de entrada activo. Típicamente, cuando se introduce un nuevo carácter, el cursor se sitúa inmediatamente después de este. En Flutter, la posición del cursor se representa mediante una selección colapsada. Cuando la selección no es válida, normalmente el usuario no podrá modificar o añadir texto hasta que cambie la selección a un valor válido.

WidgetTester.enterText y TestTextInput.enterText son 2 métodos utilizados en pruebas para reemplazar el contenido del campo de texto de destino. Antes de este cambio, WidgetTester.enterText y TestTextInput.enterText configuraban la selección en un rango no válido (-1, -1), indicando que no había selección ni cursor. Esto contradice el comportamiento típico de un campo de entrada.

Descripción del cambio

#

Además de reemplazar el texto con el texto suministrado, WidgetTester.enterText y TestTextInput.enterText ahora establecen la selección en TextSelection.collapsed(offset: text.length), en lugar de TextSelection.collapsed(offset: -1).

Guía de migración

#

Debería ser muy poco común que las pruebas tengan que depender del comportamiento anterior de enterText, ya que normalmente la selección no debería ser inválida. Considera cambiar los valores esperados de tus pruebas para adoptar el cambio de enterText.

Los fallos de prueba comunes que este cambio puede introducir incluyen:

  • Fallos en pruebas golden:

    El cursor aparece al final del texto, a diferencia de antes del texto antes del cambio.

  • Diferente TextEditingValue.selection después de llamar a enterText:

    El TextEditingValue del campo de texto ahora tiene una selección colapsada con un offset no negativo, a diferencia de TextSelection.collapsed(offset: -1) antes del cambio. Por ejemplo, podrías ver expect(controller.value.selection.baseOffset, -1); fallando después de las llamadas a enterText.

Si tus pruebas tienen que depender de establecer la selección como no válida, el comportamiento anterior se puede lograr usando updateEditingValue:

TestTextInput.enterText

#

Código antes de la migración:

dart
await testTextInput.enterText(text);

Código después de la migración:

dart
await testTextInput.updateEditingValue(TextEditingValue(
  text: text,
));

WidgetTester.enterText

#

Código antes de la migración:

dart
await tester.enterText(finder, text);

Código después de la migración:

dart
await tester.showKeyboard(finder);
await tester.updateEditingValue(TextEditingValue(
  text: text,
));
await tester.idle();

Timeline

#

Lanzado en la versión: 2.1.0-13.0.pre
En versión estable: 2.5

Referencias

#

Documentación de la API:

Issues relevantes:

PR relevante: