Saltar al contenido principal

Cliente de entrada de texto para insertar contenido

Agregar un nuevo método a la interfaz TextInputClient para permitir que los teclados virtuales de Android inserten contenido enriquecido en los TextFields de Flutter.

Resumen

#

Se agregó un método insertContent a la interfaz TextInputClient para permitir que la función de teclado de imágenes de Android inserte contenido en un TextField de Flutter.

Contexto

#

A partir de Android 7.1, los IME (editores de métodos de entrada o teclados virtuales) pueden enviar imágenes y contenido enriquecido a un editor de texto. Esto permite a los usuarios insertar gifs, stickers o contenido enriquecido según el contexto en un campo de texto.

Descripción del cambio

#

Cuando el usuario inserta contenido enriquecido en el IME, la plataforma envía un mensaje de canal TextInputClient.commitContent, notificando al código Dart que el IME insertó contenido enriquecido. El mensaje del canal contiene el tipo MIME, la URI y los datos de bytes (bytedata) para el contenido insertado en formato JSON.

Guía de migración

#

Si implementaste la interfaz TextInputClient anteriormente, sobrescribe insertContent ya sea para admitir la inserción de contenido enriquecido o para proporcionar una implementación vacía.

Para migrar, implementa insertContent.

Código antes de la migración:

dart
class MyCustomTextInputClient implements TextInputClient {
  // ...
}

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

dart
class MyCustomTextInputClient implements TextInputClient {
  // ...
  @override
  void insertContent() {
    // ...
  }
  // ...
}

Es posible que tu implementación de TextInputClient no requiera la capacidad de recibir contenido enriquecido insertado desde el IME. En ese caso, puedes dejar la implementación de insertContent vacía sin ninguna consecuencia.

dart
class MyCustomTextInputClient implements TextInputClient {
  // ...
  @override
  void insertContent() {}
  // ...
}

Como alternativa, puedes usar una implementación similar a la predeterminada de TextInputClient. Para aprender a hacer esto, echa un vistazo a la implementación de insertContent.

Para evitar cambios de ruptura en una interfaz, usa with TextInputClient en lugar de implements TextInputClient.

Timeline

#

Introducido en la versión: 3.8.0-1.0.pre
En el lanzamiento estable: 3.10.0

Referencias

#

Documentación de la API:

Problema relevante:

PRs relevantes: