带按钮的ListTile

时间:2020-07-05 22:28:36

标签: flutter dart

我在主要属性中有ListTile和按钮。一切正常,但是如果按下该按钮,那么还会激活平铺onTap手势。 Tile onTap不会仅触发动画。

enter image description here

这是代码

ListTile(
   contentPadding: EdgeInsets.zero,
   leading: IconButton(
       icon: Icon(Icons.check_circle),
     onPressed: () => print('select'),
   ),
   title: Text('TEST'),
   trailing: Icon(
      Icons.arrow_forward_ios,
  ),
  onTap: () => print('on tap'),
)

关于如何从前导区域消除tile onTap效果的任何想法。我唯一想到的方法是使用包裹在手势检测器中的行内拼贴并摆脱onTap,但我希望有任何更好的解决方案

3 个答案:

答案 0 :(得分:2)

如果您想将前导按钮和标题区域上的效果分开,另一种选择是将平面按钮放在图块区域内,然后删除onTap。这几乎与您在手势检测器中提到的解决方案相同,但是至少不必在该手势检测器上使用效果。我认为没有其他选择。

enter image description here

               ListTile(
                contentPadding: EdgeInsets.zero,
                leading: IconButton(
                  icon: Icon(Icons.check_circle),
                  onPressed: () => print('select'),
                ),
                title: FlatButton(
                  padding: EdgeInsets.zero,
                  onPressed: () => print('on tap'),
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: <Widget>[
                      Text('TEST'),
                      Icon(Icons.arrow_forward_ios)
                    ],
                  ),
                ),
              )

答案 1 :(得分:1)

请尝试将图标按钮的闪烁,悬停,突出显示颜色设置为透明。

IconButton(
highlightColor: 
Colors.transparent,
splashColor: Colors.transparent,
hoverColor: Colors.transparent,
icon: Icon(Icons.check_circle),
onPressed: () => 
print('select'),
)

答案 2 :(得分:1)

看,如果您不希望Ripple Effect上的leading,我想GestureDetector会为您提供帮助。 但是您不必用ListTile来构成整个GestureDetector,只用leading就可以了。

请在此处查看解决方案:

最终解决方案

       ListTile(
           contentPadding: EdgeInsets.zero,
           leading: GestureDetector(
             onTap: () => print('icon tapped'),
             child: Icon(Icons.check_circle)
           ),
           title: Text('TEST'),
           trailing: Icon(
              Icons.arrow_forward_ios,
          ),
          onTap: () => print('on tap'),
       )

现在上面的代码,您可以看到leading仅具有GestureDetector。否则,一切都一样,并且将按预期工作。

这是结果=>

RESULT GIF

希望对您有所帮助。让我知道。如果您有任何建议,我很高兴:)学习愉快