我准备了一个自定义覆盖小部件,我的目标是在应用程序中的任何位置使用它,因此我制作了一个全局覆盖输入,它将在创建覆盖时获取其值,然后我创建了一个函数来删除我认为的覆盖调用 Onwill pop ,但问题是,不会为此覆盖小部件调用 will pop 范围,或者如果我在其中使用任何带覆盖的小部件。
bool isOverlayOnScreen = false;
late OverlayEntry? globaOverlayEntry;
showOverlayWidget({required BuildContext context,required Widget widgetToDisplay})async{
OverlayState? overlayState = Overlay.of(context);
globaOverlayEntry = OverlayEntry(
maintainState: true,
builder: (context){
return WillPopScope(child: widgetToDisplay, onWillPop: ()async{
print("Print Will of Stack widget called----2");
return true;});
});
isOverlayOnScreen = true;
overlayState.insert(globaOverlayEntry!);
}
void removeGlobalOverlay() {
globaOverlayEntry!.remove();
globaOverlayEntry!.dispose();
isOverlayOnScreen = false;
globaOverlayEntry = null;
}
void showWidgetScreen(BuildContext context,Widget widgetToDisplay) {
showDialog(
context: context,
builder: (BuildContext context) {
return widgetToDisplay;
},
);
}
谁能给我原因和解决方案。
WillPopScope 不适用于 showDialog,但您可以使用函数的返回值,如下所示:
showDialog(
...
).then((value) {
/// Your logic here
});