【问题标题】:Flutter prevent click through widget颤振防止点击小部件
【发布时间】:2019-12-28 21:39:45
【问题描述】:

如何制作一个内部带有波纹和按钮的可点击小部件?

这是我的代码:

          Material(
              child: InkWell(
                onTap: () {},
                child: Column(
                  children: <Widget>[
                    Text("this column is clickable"),
                    IconButton(
                      icon: Icon(Icons.airplanemode_active),
                      onPressed: () {},
                    ),
                  ]
                )
              )
            ),

点击 Column 时,一切正常,波纹效果按预期在 IconButton 后面。但是当单击 IconButton 时,会调用 onPressed 触发器,但它也会激活 InkWell。有没有办法防止 InkWell 被激活?

【问题讨论】:

  • 您希望 InkWell 内的按钮在按下时不激活 InkWell 动画,对吗?
  • 我试过你的代码,只有长按才能激活 InkWell。如果只是点击,则只有 IconButton 动画。
  • @JoãoSoares 正确

标签: flutter


【解决方案1】:

Column 小部件放入GestureDetector 并设置excludeFromSemantics: true,如下所示:

Material(
  child: Padding(
    padding: const EdgeInsets.all(40.0),
    child: InkWell(
      onTap: () {},
      child: GestureDetector(
        excludeFromSemantics: true,
        child: Column(
          children: <Widget>[
            Text("this column is clickable"),
            IconButton(
              icon: Icon(Icons.airplanemode_active),
              onPressed: () {},
            ),
          ]
        ),
      )
    ),
  )
),

来自github 的帖子。

【讨论】:

  • 很遗憾,这并不能解决问题,但帖子看起来很有帮助,谢谢。
  • 奇怪,因为我试过了,它有效!您能否分享其他信息,也许我们可以提供帮助。您还在使用哪些其他父小部件?
  • 浏览器中的ya只需将鼠标悬停在图标上即可激活整个操作,长按android模拟器中的按钮也可以。正常的点击就可以了。
  • 不幸的是,它不起作用。我必须创建一个可以检查/切换的布尔值,以防止点击传播。
猜你喜欢
  • 2020-07-23
  • 2021-03-04
  • 2021-06-11
  • 2018-10-18
  • 2020-05-13
  • 2023-02-02
  • 2022-06-24
  • 2023-02-15
  • 2018-10-24
相关资源
最近更新 更多