Implementation
@override
ButtonStyle get style {
Color? getColor(Set<MaterialState> states) {
if(disable){
return backgroundPalette.normal.withOpacity(_kDisableOpacity);
}
Color color= backgroundPalette.normal;
if (states.contains(MaterialState.pressed)) {
color = backgroundPalette.pressed;
} else {
const Set<MaterialState> interactiveStates = <MaterialState>{
MaterialState.hovered,
MaterialState.focused,
};
if (states.any(interactiveStates.contains)) {
color = backgroundPalette.hover;
}
}
if(disable){
color = color.withOpacity(_kDisableOpacity);
}
return color;
}
Color? getForegroundColor(Set<MaterialState> states) {
Color color = foregroundPalette.normal;
if (states.contains(MaterialState.pressed)) {
color = foregroundPalette.pressed;
} else {
const Set<MaterialState> interactiveStates = <MaterialState>{
MaterialState.hovered,
MaterialState.focused,
};
if (states.any(interactiveStates.contains)) {
color = foregroundPalette.hover;
}
}
if(disable){
color = color.withOpacity(_kDisableOpacity);
}
return color;
}
OutlinedBorder? getOutlineColor(Set<MaterialState> states) {
Color color = borderPalette.normal;
if (states.contains(MaterialState.pressed)) {
color = borderPalette.pressed;
} else {
const Set<MaterialState> interactiveStates = <MaterialState>{
MaterialState.hovered,
MaterialState.focused,
};
if (states.any(interactiveStates.contains)) {
color = borderPalette.hover;
}
}
if(disable){
color = color.withOpacity(_kDisableOpacity);
}
if (dashGap == 0) {
return RoundedRectangleBorder(
borderRadius: borderRadius,
side: BorderSide(width: borderWidth, color: color));
}
return DashOutlineShapeBorder(
dashGap: dashGap,
borderRadius: borderRadius,
side: BorderSide(width: borderWidth, color: color));
}
return ButtonStyle(
elevation: const MaterialStatePropertyAll(0),
overlayColor: MaterialStateProperty.resolveWith(getColor),
// side: MaterialStateProperty.resolveWith((getSide)),
foregroundColor: MaterialStateProperty.resolveWith(getForegroundColor),
backgroundColor: MaterialStateProperty.all(Colors.transparent),
shape: MaterialStateProperty.resolveWith(getOutlineColor),
padding: MaterialStateProperty.all(padding),
);
}