繁体   English   中英

flutter:在堆栈中的 position 上可侦听的 onTap 按钮不起作用

[英]flutter: onTap Button listenable not work on position in stack

我试图创建一个自定义对话框。 在对话框中关闭按钮位于容器上方:

在此处输入图像描述

现在,当用户点击此关闭图标时,我正在尝试关闭对话框:

  Widget build(BuildContext context) {
    return Dialog(
      insetPadding: EdgeInsets.symmetric(vertical: 0.0, horizontal: 30.0),
      child: Container(
        width: 300,
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            Stack(
              overflow: Overflow.visible,
              children: [
                Visibility(
                  visible: true,
                  child: Positioned(
                    top: -15,
                    left: 0,
                    child: GestureDetector(
                        onTap: () {
                          print("Clicked");
                        },
                        child: CircleWidget()),
                  ),
                ),
                SingleChildScrollView(
                  child: Column(

但是onTap没有触发! 我认为它在某些小部件下放置!!!

如果 GestureDetector 是Positioned on widget shape 的父级,则变得混乱。像这样:

在此处输入图像描述

虽然onTap不能像上面那样工作。你的想法是什么?

尝试 InkWell instend 的 GestureDetector

child: InkWell(onTap: () {
       print("Clicked");
},
child: CircleWidget()),

正如我之前猜测的那样,一个小部件覆盖了GestureDetector所以我更改了此代码的 position:

Visibility(
  visible: widget.showCloseButton(),
  child: Positioned(
    top: -15,
    left: 0,

和:

SingleChildScrollView(
  child: Column(
    mainAxisSize: MainAxisSize.min,

现在 GestureDetector 就像一个魅力:-)

完整代码:

  Widget build(BuildContext context) {
    return Dialog(
      insetPadding: EdgeInsets.symmetric(vertical: 0.0, horizontal: 30.0),
      child: Container(
        width: 300,
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            Stack(
              overflow: Overflow.visible,
              children: [
                SingleChildScrollView(
                  child: Column(.....

                Visibility(
                  visible: true,
                  child: Positioned(
                    top: -15,
                    left: 0,
                    child: GestureDetector(
                        onTap: () {
                          print("Clicked");
                        },
                        child: CircleWidget()),
                  ),
                ),

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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