SystemContextMenuController.show Deprecado
El método `show` de `SystemContextMenuController` está deprecado y ha sido reemplazado por su método `showWithItems`.
Resumen
#SystemContextMenuController.show está deprecado. La misma funcionalidad se puede
lograr pasando el resultado de llamar a SystemContextMenu.getDefaultItems
a SystemContextMenuController.showWithItems.
Contexto
#La característica de SystemContextMenu dibujado por iOS originalmente se añadió sin la
capacidad de controlar qué elementos se muestran en el menú. La plataforma decidía
qué elementos mostrar en función de la TextInputConnection activa.
El problema con este enfoque es que a menudo se muestra un botón "Autofill" (Autocompletar), pero Flutter no tiene la capacidad de responder a este botón. Por lo tanto, en muchos casos, los usuarios ven un botón "Autofill" que no hace nada cuando se pulsa, y los desarrolladores de aplicaciones de Flutter no tienen forma de ocultar el botón.
Este problema se resuelve introduciendo un nuevo método,
SystemContextMenuController.showWithItems, que requiere pasar una lista de elementos (items).
Los desarrolladores que no tengan preferencia sobre qué elementos se muestran pueden llamar al nuevo método
SystemContextMenu.getDefaultItems para obtener los elementos predeterminados según el
EditableTextState proporcionado. Por ejemplo, si el EditableTextState
indica que no hay nada seleccionado, entonces el botón Copy (Copiar) no se incluirá, ya que
requiere una selección para copiar.
Guía de migración
#La mayoría de los usuarios utilizan el menú de contexto del sistema a través del widget SystemContextMenu,
y en este caso no se requerirá ningún cambio. El widget SystemContextMenu
obtiene automáticamente los elementos predeterminados internamente.
No se requiere migración:
class _MyWidgetState extends State<MyWidget> {
@override
Widget build(BuildContext context) {
TextField(
contextMenuBuilder: (BuildContext context, EditableTextState editableTextState) {
return SystemContextMenu.editableText(
editableTextState: editableTextState,
);
}
);
}
}
Para los usuarios avanzados que trabajan directamente con SystemContextMenuController,
migren al nuevo método SystemContextMenuController.showWithItems. El comportamiento
predeterminado se puede obtener de SystemContextMenu.getDefaultItems como una lista de
IOSSystemContextMenuItems, que se puede convertir al formato requerido por
showWithItems mediante IOSSystemContextMenuItem.getData.
Código antes de la migración:
_controller.show(selectionRect);
Código después de la migración:
final List<IOSSystemContextMenuItem> defaultItems =
SystemContextMenu.getDefaultItems(editableTextState);
final WidgetsLocalizations localizations =
WidgetsLocalizations.of(context);
final List<IOSSystemContextMenuItemData> defaultItemData =
defaultItems
.map((IOSSystemContextMenuItem item) =>
item.getData(localizations))
.toList();
_controller.showWithItems(selectionRect, defaultItemData);
Timeline
#Llegó en la versión: 3.29.0-0.3.pre
En la versión estable: 3.32
Referencias
#Documentación de la API:
-
TextInputConnection -
SystemContextMenuController.show -
SystemContextMenuController.showWithItems -
SystemContextMenu
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-11. Ver código fuente oreportar un problema.