我编写了一个包含按钮的小部件
以下是
Widget
。在点击该Button
时,会显示一个带有一些文本信息的小“框”。
我使用Overlay
解决了这个问题。在Overlay
内部是一个GestureDetector
。当你点击Overlay
时,Overlay
将被隐藏。
因为Overlay
没有填满整个屏幕,如果你在Overlay
后面点击,它将不会关闭。
但是,当你在屏幕上的某个地方,可能在Overlay
之外点击时,我希望Overlay
也能被隐藏。以下是
Overlay
的部分内容:class _OverlayHelpWidgetState extends State<OverlayHelpWidget> {
OverlayEntry _overlayEntry;
OverlayState _overlayState;
bool _isVisible = false;
@override
Widget build(BuildContext context) {
return Row(
children: [
Center(
child: GestureDetector(
child: Icon(
Icons.help,
color: Colors.green[800],
),
onTap: () {
showHelp();
},
),
)
],
mainAxisAlignment: MainAxisAlignment.end,
);
}
OverlayEntry _createOverlayEntry() {
return OverlayEntry(
builder: (context) => Align(
alignment: Alignment.center,
child: GestureDetector(
child: _createContent(),
onTap: () {
hideHelp();
},
),
),
);
}
showHelp() async {
if (!_isVisible) {
_overlayState = Overlay.of(context);
_overlayEntry = _createOverlayEntry();
_overlayState.insert(_overlayEntry);
_isVisible = true;
}
}
void hideHelp() {
_isVisible = false;
_overlayEntry.remove();
}
有人能帮我解决这个问题吗?
谢谢,Bhuelse
GestureDetector > Align >_createContent()
可以吗?同时尝试使用GestureDetector.behavior
属性。 - pskinkRow
->GestureDetector
的on tap
方法中检查该布尔值,然后执行适当的方法(showHelp / HideHelp)。 - TheMri