Guía de migración para ignoringSemantics en IgnorePointer y clases relacionadas
Eliminación de ignoringSemantics en IgnorePointer y clases relacionadas.
Resumen
#El Widget IgnoringPointer te permite designar un área de la UI
donde no quieras aceptar eventos de puntero, por ejemplo, cuando
no quieras permitir que el usuario ingrese texto en un campo de texto.
Anteriormente, el IgnorePointer no solo bloqueaba eventos de puntero sino que también
eliminaba su subárbol del árbol de semántica. El parámetro ignoreSemantics
fue introducido como una solución temporal para preservar el árbol de semántica al usar
IgnorePointers.
El comportamiento de IgnorePointer ha cambiado en el sentido de que ya no elimina
todo el subárbol de semántica, sino que simplemente bloquea las acciones de semántica en el
subárbol. La solución temporal ignoringSemantics ya no es necesaria y está
degradada.
Este cambio también se aplica a los Widgets AbsorbPointer y
SliverIgnorePointer.
Descripción del cambio
#Se eliminó ignoringSemantics.
Guía de migración
#Si estableces este parámetro en true en estos Widgets, considera usar
ExcludeSemantics en su lugar.
Código antes de la migración:
IgnorePointer(
ignoringSemantics: true,
child: const PlaceHolder(),
);
AbsorbPointer(
ignoringSemantics: true,
child: const PlaceHolder(),
);
SliverIgnorePointer(
ignoringSemantics: true,
child: const PlaceHolder(),
);
Código después de la migración:
ExcludeSemantics(
child: IgnorePointer(
child: const PlaceHolder(),
),
);
ExcludeSemantics(
child: AbsorbPointer(
child: const PlaceHolder(),
),
);
SliverIgnorePointer(
child: ExcludeSemantics(
child: const PlaceHolder(),
),
);
Si anteriormente usabas IgnorePointers con ignoringSemantics establecido en false,
puedes lograr el mismo comportamiento copiando los siguientes Widgets directamente en tu
código y usándolos.
/// A widget ignores pointer events without modifying the semantics tree.
class _IgnorePointerWithSemantics extends SingleChildRenderObjectWidget {
const _IgnorePointerWithSemantics({
super.child,
});
@override
_RenderIgnorePointerWithSemantics createRenderObject(BuildContext context) {
return _RenderIgnorePointerWithSemantics();
}
}
class _RenderIgnorePointerWithSemantics extends RenderProxyBox {
_RenderIgnorePointerWithSemantics();
@override
bool hitTest(BoxHitTestResult result, { required Offset position }) => false;
}
/// A widget absorbs pointer events without modifying the semantics tree.
class _AbsorbPointerWithSemantics extends SingleChildRenderObjectWidget {
const _AbsorbPointerWithSemantics({
super.child,
});
@override
_RenderAbsorbPointerWithSemantics createRenderObject(BuildContext context) {
return _RenderAbsorbPointerWithSemantics();
}
}
class _RenderAbsorbPointerWithSemantics extends RenderProxyBox {
_RenderAbsorbPointerWithSemantics();
@override
bool hitTest(BoxHitTestResult result, { required Offset position }) {
return size.contains(position);
}
}
/// A sliver ignores pointer events without modifying the semantics tree.
class _SliverIgnorePointerWithSemantics extends SingleChildRenderObjectWidget {
const _SliverIgnorePointerWithSemantics({
super.child,
});
@override
_RenderSliverIgnorePointerWithSemantics createRenderObject(BuildContext context) {
return _RenderSliverIgnorePointerWithSemantics();
}
}
class _RenderSliverIgnorePointerWithSemantics extends RenderProxySliver {
_RenderSliverIgnorePointerWithSemantics();
@override
bool hitTest(BoxHitTestResult result, { required Offset position }) => false;
}
Timeline
#Introducido en la versión: 3.10.0-2.0.pre
En el lanzamiento estable: 3.13.0
Referencias
#PRs relevantes:
- PR 120619: Corrige IgnorePointer y AbsorbPointer para que solo bloqueen las interacciones del usuario en a11y.
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.