我感觉很愚蠢:当按钮被禁用时,我无法覆盖按钮的颜色。 代码看起来不错,我可以确保_isDisabled的逻辑是正确的。
按钮的样式为:
ElevatedButton.styleFrom(
backgroundColor: _isDisabled
? Colors.amber
: MyTheme.getCiSonoButtonColor(context: context),
padding: const EdgeInsets.symmetric(
horizontal: 50, vertical: 16),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30),
),
),
...如您所见,我尝试将按钮的颜色(禁用时)设置为琥珀色,但结果是浅灰色。我真的不知道为什么。似乎禁用模式有一个预定义的颜色。
如何解决这个恼人的问题? 为了清楚起见,我附上应用程序的图像(查看灰色按钮):
注意当逻辑将 _isDisabled 变量设置为 false 时,按钮看起来就像我想要的那样。问题出在禁用时。
(我已经尝试设置ThemeData的属性disabledColor,但没有任何改变)
您可以直接在 styleFrom 上提供
disabledBackgroundColor
并在 onPressed
上设置 null
ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: Colors.grey,
disabledBackgroundColor: Colors.amber,
),
onPressed: _isDisabled ? null : () {},
child: Text("Button"),
)