如何关闭颤振中的所有叠加层
How to close all overlays in flutter
我构建了一个屏幕,该屏幕构建了一个包含搜索栏小部件的叠加层。
因为我在一个 class 中构建了覆盖调用,然后加载一个包含搜索栏的单独小部件 class。我不知道如何从活动搜索栏关闭叠加层 class。
我曾尝试创建一个关闭或处置函数,但这仅在从启动覆盖的父 class 而不是包含搜索小部件的子 class 调用时有效。
在这种情况下是否可以使用关闭或终止所有覆盖功能?
或者当搜索小部件为 运行 时,从子 class 调用驻留在父 class 中的处置/关闭覆盖函数的方法?
我能想到的唯一解决方法是将叠加层和搜索栏功能重建为一个 class,这似乎是错误的。
如果您查看 Overlay 的代码,您会看到 gem:
看到高亮部分了吗? Flutter 在内部使用一个名为“_entries”的私有变量,它可以访问当前显示的所有叠加层。
然而这是一个私有变量。因此,要回答您的问题,除非您保留对所有覆盖条目的引用然后手动关闭它们,否则您不能要求系统为您执行此操作。
我遇到了同样的问题,这是我的解决方案。我在打开新叠加层之前调用了关闭函数:
// OVERLAYS
OverlayEntry? overlayWidget;
void closeOverlay() {
if ( overlayWidget == null || overlayWidget?.mounted == false) return;
overlayWidget?.remove();
overlayWidget = null;
}
void overlayWidgetDialog(BuildContext context, {required Widget child}) {
// avoid stacking
closeOverlay();
overlayWidget = OverlayEntry(
// maintainState: true,
// opaque: true,
builder: (context) {
return child;
});
Overlay.of(context)?.insert(overlayWidget!);
}
我构建了一个屏幕,该屏幕构建了一个包含搜索栏小部件的叠加层。
因为我在一个 class 中构建了覆盖调用,然后加载一个包含搜索栏的单独小部件 class。我不知道如何从活动搜索栏关闭叠加层 class。
我曾尝试创建一个关闭或处置函数,但这仅在从启动覆盖的父 class 而不是包含搜索小部件的子 class 调用时有效。
在这种情况下是否可以使用关闭或终止所有覆盖功能?
或者当搜索小部件为 运行 时,从子 class 调用驻留在父 class 中的处置/关闭覆盖函数的方法?
我能想到的唯一解决方法是将叠加层和搜索栏功能重建为一个 class,这似乎是错误的。
如果您查看 Overlay 的代码,您会看到 gem:
看到高亮部分了吗? Flutter 在内部使用一个名为“_entries”的私有变量,它可以访问当前显示的所有叠加层。
然而这是一个私有变量。因此,要回答您的问题,除非您保留对所有覆盖条目的引用然后手动关闭它们,否则您不能要求系统为您执行此操作。
我遇到了同样的问题,这是我的解决方案。我在打开新叠加层之前调用了关闭函数:
// OVERLAYS
OverlayEntry? overlayWidget;
void closeOverlay() {
if ( overlayWidget == null || overlayWidget?.mounted == false) return;
overlayWidget?.remove();
overlayWidget = null;
}
void overlayWidgetDialog(BuildContext context, {required Widget child}) {
// avoid stacking
closeOverlay();
overlayWidget = OverlayEntry(
// maintainState: true,
// opaque: true,
builder: (context) {
return child;
});
Overlay.of(context)?.insert(overlayWidget!);
}