Flutter 中 IconButton 点击效果未生效

本文介绍了在Flutter中遇到IconButton点击效果(水波纹)未显示的问题及解决方案。问题出在装饰BoxDecoration上,点击效果被遮盖。通过在IconButton外层添加Material组件,并设置color和shape属性,可以正确显示点击效果。

Flutter 出了有段时间了,也在逐渐迭代版本,当然坑也都是逐渐踩出来的

今天来聊个IconButton 点击效果(水波纹)丢失的问题,其他带水波纹效果的同理。
当你兴致冲冲的撸了一段代码,比如这样的
页面标题,带有一个返回按钮
咱们先忽略为啥不用自带的效果啥的,就是想自己造(练)轮(代)子(码),结构简单嘛,按照 Flutter 的思路一层一层套,Container啊、Stack啊、Text啊、IconButton啊…,撸完码,开心运行下,哎呦我擦,效果符合预期嘛,开心开心(手动笑脸+10),点击下看看效果,卧槽,我的 IconButton 的点击效果呢??????

问题排查:

splashColor、highlightColor 都写了啊,多次测试无果,遂至QQ群 (Flutter官方社区_771482762) 求问大神,因为我用到了Stack ,就涉及Positioned ,大神跟我说调整下Positioned 位置看看,在此感谢大神提供的思路,因为在测试过程中端倪渐现,因为我的标题背景是渐变色的 BoxDecoration,当 IconButton 挪到右侧有透明度的区域,点击效果有一点痕迹了,于是开始调整 外层 Container 的 decoration 属性,发现果然是被遮盖了,But… 不应该是层层嵌套的吗?怎么就内容在里面显示的好好的,结果点击效果却被覆盖了呢?

百度无果,没备梯子,多次改代码尝试后,确认了问题,想去官方 GitHub 去提个 Issue,查了下,发现已经有人提过类似的 Issue,看看内容以及提及的其他讨论过该问题的

Flutter应用程序中,在计数器旁边添加一个减号通常是为了让用户能够增加或减少计数值。你可以通过以下步骤来实现这个功能: 1. 首先,你需要在UI上创建一个`TextEditingController`来控制计数器的文字内容,并一个`IconButton`用于显示减号。可以使用`TextField`的控制器和`IconButton`库来完成这一步。 ```dart TextEditingController _counterController = TextEditingController(); IconButton minusButton; ``` 2. 设计计数器组件,例如使用`TextFormField`展示计数值,同时将`onChanged`监听器绑定到`_counterController`,以便实时更新计数。 ```dart TextField( controller: _counterController, keyboardType: TextInputType.number, decoration: InputDecoration(labelText: 'Count'), ), ``` 3. 创建一个减按钮,当用户点击时更新计数值。你可以提供一个` onPressed`回调函数,这里假设`incrementCounter`是你已经有的增加计数的方法,那么减操作通常是`decrementCounter`。 ```dart minusButton = IconButton( icon: Icon(Icons.remove), onPressed: () { decrementCounter(); // 调用你的减操作方法 }, ); ``` 4. 把减按钮添加到布局中,比如`Column`、`Row`或者其他容器里,保持计数器和减号在一起。 5. 为了使减操作生效,你需要在`decrementCounter`方法中处理计数器的实际更新,例如: ```dart void decrementCounter() { int currentCount = int.parse(_counterController.text); // 获取当前计数值 if (currentCount > 0) { // 防止负数 setState(() { _counterController.text = String(currentCount - 1); }); } } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值