Saltar al contenido principal

Depreciar OverlayPortal.targetsRootOverlay y aplicar LookupBoundary en Overlay.of

Aprende sobre los cambios en OverlayPortal y Overlay en Flutter.

Resumen

#

La propiedad OverlayPortal.targetsRootOverlay fue depreciada y reemplazada por overlayLocation.

Overlay.of y Overlay.maybeOf ahora respetan LookupBoundary.

Contexto

#

Se añadió un parámetro overlayLocation al constructor por defecto de OverlayPortal para controlar dónde se renderiza el hijo del overlay. Como resultado, el constructor OverlayPortal.targetsRootOverlay ya no es útil.

Para evitar que un OverlayEntry se inserte a través de límites multi-vista por error, Overlay.of ahora respeta LookupBoundary.

Descripción del cambio

#

El constructor OverlayPortal.targetsRootOverlay está depreciado.

Overlay.of y Overlay.maybeOf no buscarán más allá de LookupBoundary.

Guía de migración

#

Si estás usando OverlayPortal.targetsRootOverlay, usa OverlayPortal con overlayLocation en su lugar.

Caso 1: caso trivial

#

Código antes de la migración:

dart
Widget build(BuildContext context) {
  return OverlayPortal.targetsRootOverlay(
    controller: myController,
    overlayChildBuilder: _myBuilder,
    child: myChild,
  );
}

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

dart
Widget build(BuildContext context) {
  return OverlayPortal(
    overlayLocation: OverlayChildLocation.rootOverlay,
    controller: myController,
    overlayChildBuilder: _myBuilder,
    child: myChild,
  );
}

Si esperas que Overlay.of y Overlay.maybeOf busquen más allá de LookupBoundary, usa findAncestorStateOfType en su lugar.

Código antes de la migración:

dart
Widget build(BuildContext context) {
  Overlay.of(context);
  // ...
}

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

dart
Widget build(BuildContext context) {
  context.findAncestorStateOfType<OverlayState>();
  // ...
}

Timeline

#

Llegó en la versión: 3.38.0-0.1.pre
En la versión estable: 3.38

Referencias

#

Documentación de la API:

Problema relevante:

PR relevante: