我有一个简单的卡片,例如new Card(child: new Text('My cool card'))
,我想让用户能够点击卡片上的任何位置来触发一些功能,但是Card没有onPressed
方法。我可以在底部添加一个按钮,但这对于这种情况不是理想的解决方案。
有人知道如何使整个卡片可点击吗?
我有一个简单的卡片,例如new Card(child: new Text('My cool card'))
,我想让用户能够点击卡片上的任何位置来触发一些功能,但是Card没有onPressed
方法。我可以在底部添加一个按钮,但这对于这种情况不是理想的解决方案。
有人知道如何使整个卡片可点击吗?
Flutter使用组合而非属性来实现功能。将所需的小部件包装到可点击的小部件中,以实现所需效果。
一些可点击的小部件:GestureDetector
、InkWell
、InkResponse
。
GestureDetector(
onTap: () => ......,
child: Card(...),
);
Card
的child
包装在InkWell
中。在您的情况下,涟漪效果无法显示,因为它会被Card
遮挡。 - Ovidiu Uşvatcolor
参数),并且您希望该颜色在悬停/轻触时更改,则需要将InkWell放置在Card内部。 - rjhclipBehavior
属性,例如clipBehavior: Clip.hardEdge
。 - Alex.FInkWell()
小部件中。InkWell(
onTap: (){ print("Card Clicked"); }
child: new Card(),
);
您可以使用Inkwell并插入splashColor,当用户点击时,可以在卡片上使用选择的颜色创建回弹效果。这主要用于材料设计。
return Card(
color: item.completed ? Colors.white70 : Colors.white,
elevation: 8,
child: InkWell(
splashColor: "Insert color when user tap on card",
onTap: () async {
},
),
);
将卡片包装在GestureDetector小部件中,代码如下:
GestureDetector(
onTap: () {
// To do
},
child: Card(
),
),
另一种方法如下:
InkWell(
onTap: () {
// To do
},
child: Card(),
),
InkWell(
child: Card(......),
onTap: () {
print("Click event on Container");
},
);
GestureDetector 是一个用于检测手势的小部件。
GestureDetector(
onTap: () {
print("Click event on Container");
},
child: Card(.......),
)
区别
InkWell 是一个 Material 组件,当接收到触摸时,它可以显示涟漪效果。
GestureDetector 是更通用的组件,不仅支持触摸操作,还支持其他手势。
ListTile
添加为 Card
的子元素。 ListTile
不仅包含 onTap
方法,还能帮助你让 Card 变得更有趣。Card(
child: ListTile(
title: Text('Title')
leading: CircleAvatar(
backgroundImage: AssetImage('assets/images/test.jpg'),
),
onTap: () {
print('Card Clicked');
},
),
),
大部分答案都很棒,但我想分享我的方法,适用于想在卡片或列表项上创建/显示涟漪效果的人。
Card(
child: TextButton(
onPressed: ()=> ...,
child: ListTile(
title: Text('title'),
),
),
);
TextButton clickableCard = TextButton(child: card, onPressed: onCardClick, style: [...]);
child: Card(------
------------
--------),
步骤1:将鼠标光标放在Card
上,然后按下Alt+Enter
(在Windows中)选择使用小部件包装
。
步骤2:将默认小部件更改为GestureDetector
。
最终代码:
child: GestureDetector(
onTap: YourOnClickCode(),
child: Card(------
------------
--------),
),
GestureDetector
包装一下吗? - Colin Ricardo