Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 带按钮的列表平铺_Flutter_Dart - Fatal编程技术网

Flutter 带按钮的列表平铺

Flutter 带按钮的列表平铺,flutter,dart,Flutter,Dart,我在leading属性中有ListTile和button。一切正常,但是,如果按下按钮,则也会激活“互动贴”手势。Tile onTap不会仅触发动画 这是密码 ListTile( contentPadding: EdgeInsets.zero, leading: IconButton( icon: Icon(Icons.check_circle), onPressed: () => print('select'), ), title: Te

我在leading属性中有ListTile和button。一切正常,但是,如果按下按钮,则也会激活“互动贴”手势。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'),
)

任何关于如何从主导区域消除瓷砖onTap效果的想法。我想到的唯一方法是使用用手势检测器包装的瓷砖中的行,并摆脱onTap,但我希望有更好的解决方案,如果有,请尝试将图标按钮的spash、hover和HIGHT颜色设置为透明

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

看,如果你不想在你的
前导上产生
涟漪效应
,我想,
手势检测器
会对你有所帮助但是您不必使用
手势检测器制作整个
列表,只有
前导可以。

请在此处查看解决方案:

最终解决方案

       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'),
       )
现在,在上面的代码中,您可以看到
前导
只有
手势检测器
。除此之外,一切都是一样的,并将按预期工作

以下是结果=>


我希望这对你有帮助。让我知道。如果您有任何建议,我洗耳恭听:)快乐学习

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

listile(
contentPadding:EdgeInsets.zero,
领先:IconButton(
图标:图标(图标。勾选圆圈),
按下时:()=>print('select'),
),
标题:扁平按钮(
填充:EdgeInsets.zero,
按下时:()=>打印(“点击时”),
孩子:排(
mainAxisAlignment:mainAxisAlignment.spaceBetween,
儿童:[
文本(“测试”),
图标(图标。箭头\前进\ ios)
],
),
),
)

这将消除按钮效果。。我需要从tile-leading区域消除tile-onTap效果。我认为您对此无能为力,在
列表tile
中没有任何属性可以消除
onTap
效果。用
手势检测器将其包裹起来
是一种消除按钮效果的方法,效果与坦率回答相同。我希望将这些效果分割为按钮的前导区域和tile onTap的其余平铺区域。嘿@delmin,我没有完全理解你的问题,当我阅读这一行时,我不知道如何从前导区域去除tile 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)
                    ],
                  ),
                ),
              )