Flutter自定义渐变按钮无InkResponse响应问题求助
解决自定义按钮的Ink水波纹不生效问题
嘿,我太懂你这种头疼的感觉了——好不容易把渐变按钮的布局搞定,结果水波纹效果没了!咱们来一步步把这个问题解决掉:
问题根源
你代码里的Container其实是“幕后黑手”:Ink的水波纹是绘制在Material的底层墨水层的,而Container的布局层级会盖在Ink上面,哪怕没设置背景色,也会把水波纹完全挡住。另外,你的InkResponse还没绑定onTap回调,这也是水波纹根本不会触发的关键原因哦。
修改后的完整代码
@override Widget build(BuildContext context) { return Material( elevation: 7.0, borderRadius: BorderRadius.all(Radius.circular(10.0)), child: InkResponse( // 必须添加onTap回调,水波纹才会被触发 onTap: () { // 这里放你的按钮点击逻辑 }, // 和外层圆角保持一致,水波纹会贴合按钮形状 borderRadius: BorderRadius.all(Radius.circular(10.0)), child: Ink( decoration: BoxDecoration( gradient: gradient, borderRadius: BorderRadius.all(Radius.circular(10.0)), ), // 用Ink自身的constraints替代Container,实现尺寸约束 constraints: BoxConstraints.expand(height: 48), child: Row( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ SizedBox(width: 48), Expanded( child: Center( child: Text( text, style: MC_callToActionGradientText, ), ), ), SizedBox( width: 48.0, child: Icon( icon, color: Colors.white, size: 23.0, ), ) ], ), ), ), ); }
核心调整说明
- 移除了嵌套的
Container:直接用Ink的constraints控制按钮高度,避免遮挡底层的墨水层水波纹 - 给
InkResponse添加onTap回调:没有触发事件的话,水波纹是不会显示的哦 - 同步
InkResponse的圆角:让水波纹完美贴合按钮的圆角,视觉效果和原生按钮一致
这样改完之后,你的自定义渐变按钮就能拥有和原生RaisedButton一模一样的水波纹点击反馈啦!
内容的提问来源于stack exchange,提问作者user54517
相关产品推荐
相关产品推荐

