[英]How can I close an overlay with the click of a button in widget?
这是我的颤振代码,我想在单击我调用 closeOverlay() 的图标按钮时关闭叠加层,但它显示的错误为:
Try moving the declaration to before the first use, or renaming the local variable so that it doesn't hide a name from an enclosing scope.
我还尝试将overlayEntry.remove 函数直接调用到onPressed 函数,它给出了一个类似的错误,即overlayEntry 在声明之前无法被引用,尽管它在此处调用之前已声明。
showTeacherDetails(BuildContext context) {
OverlayState overlayState = Overlay.of(context);
OverlayEntry overlayEntry = OverlayEntry(
builder: (context) => Positioned(
width: SizeConfig.blockSizeHorizontal * 25,
height: SizeConfig.blockSizeVertical * 92,
top: SizeConfig.blockSizeVertical * 8,
left: SizeConfig.blockSizeHorizontal * 75,
child: Container(
padding: EdgeInsets.symmetric(
vertical: SizeConfig.blockSizeVertical * 0.5,
horizontal: SizeConfig.blockSizeHorizontal * 1),
color: Colors.white,
child: Column(
children: [
IconButton(
icon: Icon(Icons.close, size: 40,),
onPressed: closeOverlay() //error
),
],
))));
overlayState.insert(overlayEntry);
closeOverlay(){
overlayEntry.remove();
}
}
}
只需声明变量,然后分配它
showTeacherDetails(BuildContext context) {
OverlayEntry overlayEntry; //We declare
overlayEntry = OverlayEntry( //We assign
builder: (context) => Positioned(
width: SizeConfig.blockSizeHorizontal * 25,
height: SizeConfig.blockSizeVertical * 92,
top: SizeConfig.blockSizeVertical * 8,
left: SizeConfig.blockSizeHorizontal * 75,
child: Container(
padding: EdgeInsets.symmetric(
vertical: SizeConfig.blockSizeVertical * 0.5,
horizontal: SizeConfig.blockSizeHorizontal * 1),
color: Colors.white,
child: Column(
children: [
IconButton(
icon: Icon(Icons.close, size: 40,),
onPressed: (){
// add null checks to the overlay before removing
overlayEntry?.remove()
}
),
],
))));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.