【发布时间】:2018-10-02 05:34:15
【问题描述】:
我只有一个像new Card(child: new Text('My cool card')) 这样的简单卡片,我希望能够单击它的任意位置来运行某些功能,除了卡片没有onPressed 方法。我可以在底部添加一个按钮,但这并不适合这种情况。
有人知道如何使整张卡片可点击吗?
【问题讨论】:
-
你试过用
GestureDetector包装吗?
我只有一个像new Card(child: new Text('My cool card')) 这样的简单卡片,我希望能够单击它的任意位置来运行某些功能,除了卡片没有onPressed 方法。我可以在底部添加一个按钮,但这并不适合这种情况。
有人知道如何使整张卡片可点击吗?
【问题讨论】:
GestureDetector包装吗?
Flutter 使用组合而不是属性。 将所需的小部件包装成一个可点击的小部件以实现您的需要。
一些可点击的小部件:GestureDetector、InkWell、InkResponse。
GestureDetector(
onTap: () => ......,
child: Card(...),
);
【讨论】:
InkWell 中,即使它未能显示出涟漪效应。似乎我们需要做更多的嵌套,比如this
Card 的child 包裹在InkWell 内。涟漪效应无法在您的案例中显示,因为它将位于Card 后面。
我想你也可以使用InkWell 除了GestureDetector 只需将卡片包裹在InkWell() Widget 中
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 {
},
),
);
【讨论】:
InkWell 的答案有何不同吗?
最首选的方法是将ListTile 添加为Card 子级。 ListTile 不仅包含onTap 方法,它还可以帮助您使卡片变得有趣。
Card(
child: ListTile(
title: Text('Title')
leading: CircleAvatar(
backgroundImage: AssetImage('assets/images/test.jpg'),
),
onTap: () {
print('Card Clicked');
},
),
),
【讨论】:
在 Flutter 中,InkWell 是一个响应触摸动作的材质小部件。
InkWell(
child: Card(......),
onTap: () {
print("Click event on Container");
},
);
GestureDetector 是一个检测手势的小部件。
GestureDetector(
onTap: () {
print("Click event on Container");
},
child: Card(.......),
)
区别
InkWell 是一个材质小部件,它可以在收到触摸时显示波纹效果。
GestureDetector 更通用,不仅适用于触摸,还适用于其他手势。
【讨论】:
您也可以在 TextButton 中插入卡片:
TextButton clickableCard = TextButton(child: card, onPressed: onCardClick, style: [...]);
这带来了好处,您可以免费获得一些功能。例如,在 Flutter Web 中,您会获得鼠标悬停效果,并且光标会变为手形,以便用户知道,他可以点击那里。可以使用该样式自定义其他附加功能。
【讨论】:
在 Flutter 中点击/点击“孩子”时做一些事情:-
代码:-您的代码如下所示:
child: Card(------
------------
--------),
Step1:- 将鼠标光标放在Card 然后按- Alt+Enter(在Windows 中)select wrap with widget。
第 2 步:- 将您的默认小部件更改为 GestureDetector。
最终代码:-
child: GestureDetector(
onTap: YourOnClickCode(),
child: Card(------
------------
--------),
),
【讨论】:
在 GestureDetector Widget 中包装一张卡片,如下所示:
GestureDetector(
onTap: () {
// To do
},
child: Card(
),
),
另一种方式如下:
InkWell(
onTap: () {
// To do
},
child: Card(),
),
【讨论】:
大多数答案都很棒,但我只想与那些想要在卡片或列表磁贴上制作/显示连锁反应的人分享我的答案。
Card(
child: TextButton(
onPressed: ()=> ...,
child: ListTile(
title: Text('title'),
),
),
);
【讨论】: