我在主要属性中有ListTile和按钮。一切正常,但是如果按下该按钮,那么还会激活平铺onTap手势。 Tile onTap不会仅触发动画。
这是代码
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,但我希望有任何更好的解决方案
答案 0 :(得分:2)
如果您想将前导按钮和标题区域上的效果分开,另一种选择是将平面按钮放在图块区域内,然后删除onTap。这几乎与您在手势检测器中提到的解决方案相同,但是至少不必在该手势检测器上使用效果。我认为没有其他选择。
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
。否则,一切都一样,并且将按预期工作。
这是结果=>
希望对您有所帮助。让我知道。如果您有任何建议,我很高兴:)学习愉快