在Material3主题中设置IconButton颜色且不覆盖禁用态颜色
你之前使用MaterialStateProperty.all(Colors.white)会强制IconButton在所有状态下都显示纯白色,包括禁用态,这就丢失了禁用态的透明度标识。想要同时实现正常态纯白、禁用态带透明度的效果,你可以改用MaterialStateProperty.resolveWith来根据不同状态返回对应颜色:
iconButtonTheme: IconButtonThemeData( style: ButtonStyle( foregroundColor: MaterialStateProperty.resolveWith((states) { if (states.contains(MaterialState.disabled)) { // 禁用态返回带透明度的白色,透明度值可按需调整(Material3默认禁用态透明度为0.38) return Colors.white.withOpacity(0.38); } // 其余状态(正常、按下、悬浮等)返回纯白色 return Colors.white; }), ), ),
这段代码会自动识别按钮的状态:当按钮处于禁用态时,返回带透明度的白色;其他状态下则保持纯白色,完美兼顾视觉需求和状态标识的合理性。
内容的提问来源于stack exchange,提问作者Jonas
相关产品推荐
相关产品推荐

