如何根据 MaterialState 更改 flutter 按钮边框颜色?
How to change flutter button border color based on MaterialState?
有没有办法根据 MaterialState 更改 flutter MateriaButton 边框颜色(或任何其他属性)?
ButtonStyle(
backgroundColor: MaterialStateProperty.resolveWith<Color?>((states) => ...),
overlayColor: MaterialStateProperty.resolveWith<Color?>((states) => ...),
side: MaterialStateProperty.resolveWith<BorderSide?>((states) => {
if (states.contains(MaterialState.pressed)) {
return BorderSide(color: Colors.Blue);
}
return BorderSide(color: Colors.Red);
}),
)
尝试这样设置边框,侧面好像没有任何效果,但一直是红色。 backgroundColor 和 overlayColor 似乎都根据状态而改变,但侧面 属性 不会。有办法实现吗?
编辑:以这种方式设置边 属性 毕竟似乎可行。 @nagendra nag 提出的方法也很有效。实际问题似乎是动画似乎很慢,所以除非按下按钮片刻,否则变化是不可见的。
试试这个
shape: MaterialStateProperty.resolveWith(
(states) {
if (states.contains(MaterialState.focused)) {
return const RoundedRectangleBorder(
side: BorderSide(color: Colors.red),
);
}
if (states.contains(MaterialState.pressed)) {
return const RoundedRectangleBorder(
side: BorderSide(color: Colors.green),
);
}
if (states.contains(MaterialState.hovered)) {
return const RoundedRectangleBorder(
side: BorderSide(color: Colors.blue),
);
}
},
),
),
有没有办法根据 MaterialState 更改 flutter MateriaButton 边框颜色(或任何其他属性)?
ButtonStyle(
backgroundColor: MaterialStateProperty.resolveWith<Color?>((states) => ...),
overlayColor: MaterialStateProperty.resolveWith<Color?>((states) => ...),
side: MaterialStateProperty.resolveWith<BorderSide?>((states) => {
if (states.contains(MaterialState.pressed)) {
return BorderSide(color: Colors.Blue);
}
return BorderSide(color: Colors.Red);
}),
)
尝试这样设置边框,侧面好像没有任何效果,但一直是红色。 backgroundColor 和 overlayColor 似乎都根据状态而改变,但侧面 属性 不会。有办法实现吗?
编辑:以这种方式设置边 属性 毕竟似乎可行。 @nagendra nag 提出的方法也很有效。实际问题似乎是动画似乎很慢,所以除非按下按钮片刻,否则变化是不可见的。
试试这个
shape: MaterialStateProperty.resolveWith(
(states) {
if (states.contains(MaterialState.focused)) {
return const RoundedRectangleBorder(
side: BorderSide(color: Colors.red),
);
}
if (states.contains(MaterialState.pressed)) {
return const RoundedRectangleBorder(
side: BorderSide(color: Colors.green),
);
}
if (states.contains(MaterialState.hovered)) {
return const RoundedRectangleBorder(
side: BorderSide(color: Colors.blue),
);
}
},
),
),