Flutter中如何结合ButtonStyle与ElevatedButton.styleFrom设置按钮样式?
下面提供两种简洁的实现方式,任选其一即可:
方案一:直接通过ButtonStyle统一配置
在ButtonStyle中同时定义尺寸和状态颜色,一步到位:
ElevatedButton( onPressed: null, // 设置为null触发禁用状态 style: ButtonStyle( // 设置全屏宽度+固定高度(50) minimumSize: MaterialStateProperty.all(const Size(double.infinity, 50)), // 处理禁用/启用状态的背景色 backgroundColor: MaterialStateProperty.resolveWith<Color>( (Set<MaterialState> states) { if (states.contains(MaterialState.disabled)) { return Colors.green; } return Colors.blue; // 启用状态默认颜色 }, ), ), child: const Text("测试按钮"), )
方案二:styleFrom + merge组合配置
如果习惯用ElevatedButton.styleFrom快速设置基础样式,可通过merge方法合并状态色配置:
ElevatedButton( onPressed: () {}, // 启用状态 style: ElevatedButton.styleFrom( minimumSize: const Size(double.infinity, 50), // 全屏宽度+固定高度 ).merge( ButtonStyle( backgroundColor: MaterialStateProperty.resolveWith<Color>( (Set<MaterialState> states) { if (states.contains(MaterialState.disabled)) { return Colors.green; } return Colors.blue; }, ), ), ), child: const Text("测试按钮"), )
关键说明
Size(double.infinity, 50)中的double.infinity会让按钮宽度铺满父组件的可用空间,实现全屏宽度效果;MaterialStateProperty.resolveWith用于根据按钮当前状态(禁用、按下等)动态返回对应样式;- 两种方案本质都是配置
ButtonStyle,只是写法不同,选自己顺手的即可。
内容的提问来源于stack exchange,提问作者Nao COMATSU
相关产品推荐
相关产品推荐

