繁体   English   中英

如何通过单击小部件中的按钮关闭叠加层?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM