【问题标题】:How to remove a button with its own onPressed function如何使用自己的 onPressed 函数删除按钮
【发布时间】:2021-01-17 04:21:09
【问题描述】:

编辑:在将不透明度设置为 0 的行之后添加 20 毫秒的延迟。

我有一个可以截屏的 FAB。但我不希望它出现在屏幕截图中。因此,它是可见性小部件的子部件,并且它首先要使自己不可见。但是,该函数的其余部分没有运行并给出错误:

查找死掉的小部件的祖先是很危险的

不透明度不起作用,因为我猜,即使它的不透明度为 0,它仍然是小部件树的一部分,并且包含在屏幕截图中。

如何保留小部件但使其在屏幕截图中不可见?

【问题讨论】:

    标签: flutter


    【解决方案1】:

    你可以用显示条件包装你的容器

    child: (showBtn ?
        FlatButton(
          onPressed: () => setState(() => showBtn = false),
        )
      :
        Container()
      ),
    

    【讨论】:

    • 仍然是死父错误。唯一有效的是不透明度设置后的延迟。
    • 我想对此更熟悉的人需要实际的代码来理解这个问题。另一种解决方法可能是使用我上面的方法从按钮中删除大小、填充、文本背景颜色等。然后,我会假设它仍然处于活动状态,您只是看不到它
    • 来自文档:默认情况下,可见属性控制子树是否包含在子树中;当它不可见时,替换的孩子(通常是一个零大小的盒子)被包括在内。所以小部件不在子树中,因此在不可见时已经死了。另一方面,不透明度可以满足您对容器的建议。
    • 但正如你所说,不透明度不适用于屏幕截图。使用我上一条评论中应用的上述方法,大小变为零并且它也没有渲染内容。所以这在屏幕截图上也应该是不可见的。
    【解决方案2】:

    您也可以使用可见性

     bool visibility = true;
    
        Visibility(
                visible: visibility,
                child: FloatingActionButton(onPressed: () {
                  setState(() => visibility = false);
        
                  screenshotCapture().then((img) {
                    setState(() => visibility = true);
                  });
                  
                }),
              ),
    

    【讨论】:

    • 这就是我最初所做的,正如问题中提到的那样
    【解决方案3】:

    你可以这样使用它

    widgetVisible = true;
    //Now somewhere where you add the button
    widgetVisible?FlatButton(
       onPressed:(){
          setState((){
              widgetVisible=false;
           });
       }  
    ):Container()
    

    【讨论】:

      猜你喜欢
      • 2019-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-08
      • 1970-01-01
      • 2021-06-24
      • 2014-04-18
      • 1970-01-01
      相关资源
      最近更新 更多