csharp
declare interface AttributeModifier<T> {
/**
* Defines the normal update attribute function.
*/
applyNormalAttribute?(instance: T): void;
/**
* Defines the pressed update attribute function.
*/
applyPressedAttribute?(instance: T): void;
/**
* Defines the focused update attribute function.
*/
applyFocusedAttribute?(instance: T): void;
/**
* Defines the disabled update attribute function.
*/
applyDisabledAttribute?(instance: T): void;
/**
* Defines the selected update attribute function.
*/
applySelectedAttribute?(instance: T): void;
}
AttributeModifier 定义的方法会在组件切换到对应的状态的时候出发点。
基本用法:1 实现AttributeModifier 类型T的指定决定于这个Modifier最终作用在哪个组件上。通过对应组件的 attributeModifier 方法的参数就可以知道具体的类型。
scss
class ButtonModifierImpl implements AttributeModifier<ButtonModifier> {
isClick = false;
applyPressedAttribute(instance: ButtonModifier): void {
if(this.isClick){
instance.backgroundColor(Color.Red)
}else {
instance.backgroundColor(Color.Blue)
}
}
applyNormalAttribute(instance: ButtonModifier): void {
if(this.isClick){
instance.backgroundColor(Color.Red)
}else {
instance.backgroundColor(Color.Blue)
}
}
}
2 使用 我这里是作用在Button上,所以T的类型就是ButtonModifier
less
@State
buttonModifier : ButtonModifierImpl = new ButtonModifierImpl();
kotlin
Column(){
Button("测试Modifier")
.attributeModifier(this.buttonModifier)
Button("测试Modifier")
.backgroundColor(Color.Blue)
.onClick((event)=>{
this.buttonModifier.isClick = !this.buttonModifier.isClick
})
}
2.1 当Button 触发不同的回调的时候,就会设置新的样式。比如点击的时候。 2.2 也可以在Modifier中定义变量。当变量发生改变的时候,也会触发回调。注意的是buttonModifier必须使用@State注解。