Se agregó el parámetro BuildContext a TextEditingController.buildTextSpan
Se añade un parámetro BuildContext a TextEditingController.buildTextSpan para que los herederos que sobrescriban buildTextSpan puedan acceder a los Widgets heredados.
Resumen
#Se añadió un parámetro BuildContext a TextEditingController.buildTextSpan.
Las clases que extienden o implementan TextEditingController
y sobrescriben buildTextSpan deben añadir el parámetro BuildContext
a la firma para que sea una sobrescritura válida.
Los llamadores de TextEditingController.buildTextSpan
deben pasar un BuildContext a la llamada.
Contexto
#TextEditingController.buildTextSpan es llamado por EditableText
en su controlador para crear el TextSpan que renderiza.
buildTextSpan se puede sobrescribir en clases personalizadas que extienden
TextEditingController. Esto permite que las clases que extienden
TextEditingController sobrescriban buildTextSpan para cambiar
el estilo de partes del texto, por ejemplo, para la edición de texto enriquecido.
Cualquier estado requerido por buildTextSpan
(aparte de los argumentos TextStyle y withComposing)
debía pasarse a la clase que extiende
TextEditingController.
Descripción del cambio
#Con el BuildContext disponible, los usuarios pueden acceder a
InheritedWidgets dentro de buildTextSpan
para recuperar el estado necesario para dar estilo al texto,
o de lo contrario manipular el TextSpan creado.
Considera el ejemplo donde tenemos un
HighlightTextEditingController que quiere
resaltar el texto estableciendo su color en Theme.accentColor.
Antes de este cambio, la implementación del controlador se vería así:
class HighlightTextEditingController extends TextEditingController {
HighlightTextEditingController(this.highlightColor);
final Color highlightColor;
@override
TextSpan buildTextSpan({TextStyle? style, required bool withComposing}) {
return super.buildTextSpan(style: TextStyle(color: highlightColor), withComposing: withComposing);
}
Y los usuarios del controlador necesitarían pasar el color al crear el controlador.
Con el parámetro BuildContext disponible,
el HighlightTextEditingController puede acceder directamente a
Theme.accentColor utilizando Theme.of(BuildContext):
class HighlightTextEditingController extends TextEditingController {
@override
TextSpan buildTextSpan({required BuildContext context, TextStyle? style, required bool withComposing}) {
final Color color = Theme.of(context).accentColor;
return super.buildTextSpan(context: context, style: TextStyle(color: color), withComposing: withComposing);
}
}
Guía de migración
#Sobrescribir TextEditingController.buildTextSpan
#
Añade un parámetro required BuildContext context a la
firma de la sobrescritura de buildTextSpan.
Código antes de la migración:
class MyTextEditingController {
@override
TextSpan buildTextSpan({TextStyle? style, required bool withComposing}) {
/* ... */
}
}
Ejemplo de mensaje de error antes de la migración:
'MyTextEditingController.buildTextSpan' ('TextSpan Function({TextStyle? style, required bool withComposing})') isn't a valid override of 'TextEditingController.buildTextSpan' ('TextSpan Function({required BuildContext context, TextStyle? style, required bool withComposing})').
Código después de la migración:
class MyTextEditingController {
@override
TextSpan buildTextSpan({required BuildContext context, TextStyle? style, required bool withComposing}) {
/* ... */
}
}
Llamar a TextEditingController.buildTextSpan
#
Pasa un parámetro con nombre 'context' de tipo
BuildContext a la llamada.
Código antes de la migración:
TextEditingController controller = /* ... */;
TextSpan span = controller.buildTextSpan(withComposing: false);
Mensaje de error antes de la migración:
The named parameter 'context' is required, but there's no corresponding argument.
Try adding the required argument.
Código después de la migración:
BuildContext context = /* ... */;
TextEditingController controller = /* ... */;
TextSpan span = controller.buildTextSpan(context: context, withComposing: false);
Timeline
#Llegó en la versión: 1.26.0
En la versión estable: 2.0.0
Referencias
#Documentación de la API:
Issues relevantes:
PRs relevantes:
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.