currentTextEditingValue de TextInputClient
Añadir un nuevo campo a la interfaz TextInputClient para obtener el TextEditingValue actual de un cliente.
Resumen
#Añade un campo, currentTextEditingValue, a la interfaz TextInputClient
interfaz para obtener el valor actual de un campo de texto editable
desde un cliente de plataforma.
Contexto
#La clase TextInputClient es utilizada por el framework de Flutter para
comunicarse con el código de plataforma sobre el estado actual de los
widgets de entrada de texto como EditableText.
El lado de la plataforma puede perder su estado cuando una aplicación de Android
pasa a segundo plano. A partir de este cambio,
la aplicación puede pedirle al framework el último estado conocido.
Para obtener esta información,
se expuso TextEditingValue para TextInputClient.
Descripción del cambio
#En algunas plataformas soportadas, la aplicación se puede mover a
segundo plano, donde se espera que consuma menos recursos.
Por ejemplo, una aplicación en segundo plano en Android debería evitar consumir
memoria innecesaria y no tiene necesidad de retener referencias a las vistas.
Antes de este cambio, el código de plataforma específico de Android podía
perder información de estado sobre los campos de texto editables cuando
la aplicación volvía a primer plano.
Esto se ve, por ejemplo,
cuando el texto ingresado en un widget TextField se pierde en
el código Java, pero aún se recuerda en el código Dart.
A partir de este cambio,
el lado de la plataforma ahora envía un mensaje a través del canal textInput
llamado TextInput.requestExistingState.
Esto notifica al código Dart que, cuando la aplicación se active,
debe restablecer cualquier conexión de entrada de texto
y notificar a la plataforma su estado de edición más
recientemente conocido.
La clase TextInput interactúa con los widgets cliente utilizando
la interfaz TextInputClient. Esta interfaz anteriormente
no proporcionaba información sobre el valor actual que tenía un cliente.
Para permitir que la clase TextInput responda adecuadamente a
TextInput.requestExistingState, se agregó un nuevo getter a
TextInputClient llamado currentTextEditingValue.
No puedes usar de forma segura el último valor pasado a
TextInputConnection.setEditingState, ya que el cliente
solo llama a ese método bajo circunstancias específicas,
como cuando el código Dart modifica directamente el valor de un
TextEditingController de una manera que no refleja directamente
el manejo nativo de la plataforma para la respuesta a un evento de entrada de teclado.
Así es como funciona generalmente un TextInputFormatter,
o lo que sucede cuando el código Dart establece directamente
TextEditingController.value.
Guía de migración
#Si anteriormente implementaste o extendiste TextEditingClient,
ahora debes agregar la invalidación adecuada para currentTextEditingValue.
Este valor puede ser nulo.
Si deseas migrar antes de que llegue este cambio, puedes agregar una clase a tu clase similar a la siguiente:
abstract class _TemporaryTextEditingClient {
TextEditingValue get currentTextEditingValue;
}
Esto te permite agregar el nuevo miembro con una
anotación @override antes de que el cambio llegue
al framework. Más tarde, puedes eliminar la
definición de interfaz temporal.
Código antes de la migración:
class _MyCustomTextWidgetState extends State<MyCustomWidget> implements TextEditingClient {
...
@override
void updateEditingValue(TextEditingValue value) {
...
}
@override
void performAction(TextInputAction action) {
...
}
@override
void updateFloatingCursor(RawFloatingCursorPoint point) {
...
}
}
Código después de la migración:
class _MyCustomTextWidgetState extends State<MyCustomWidget> implements TextEditingClient {
...
@override
TextEditingValue get currentTextEditingValue => widget.textEditingController.value;
@override
void updateEditingValue(TextEditingValue value) {
...
}
@override
void performAction(TextInputAction action) {
...
}
@override
void updateFloatingCursor(RawFloatingCursorPoint point) {
...
}
}
Timeline
#Lanzado en la versión: 1.16.3
En versión estable: 1.17
Referencias
#Documentación de la API:
Problema relevante:
PR relevante:
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.