【发布时间】:2022-08-05 11:54:17
【问题描述】:
侦听器函数可以侦听任何参数类型(不仅是侦听器类型)。这与小部件无关。
前任。
int a = 0;
listener((a>0)=>print(\"A = $a\"));
a= 1; //A = 1
a= -1; //
a= 2; //A = 2
侦听器函数可以侦听任何参数类型(不仅是侦听器类型)。这与小部件无关。
前任。
int a = 0;
listener((a>0)=>print(\"A = $a\"));
a= 1; //A = 1
a= -1; //
a= 2; //A = 2
您可以为此使用ValueNotifier。这是一个ChangeNotifier,当值被替换为不等于相等运算符== 评估的旧值时触发。
Here 是关于这种方法的一个很好的教程。
【讨论】:
基本方法是创建用于更新要添加到侦听器的参数的函数。
void test() {
int a = 0;
void updateA(newA) {
if(newA is! int) return;
a = newA;
if (a > 0) print("A = $a");
}
updateA(1);
updateA(-1);
updateA(2);
}
更好的方法是使用类创建参数。
void main() {
ParameterWithListener a = ParameterWithListener(data: 0);
a.listener = () {
if (a.data is int && a.data > 0) print("A = ${a.data}");
};
a.update(1);
a.update(-1);
a.update(2);
}
class ParameterWithListener {
ParameterWithListener({this.data, this.listener});
dynamic data;
Function()? listener;
Future update(data) async {
this.data = data;
if (listener is Function()) await listener!();
}
}
结果:
A = 1
A = 2
【讨论】: