[英]Remove textField listner in flutter
如何禁用/删除 flutter 中的textField
的控制侦听器,我正在使用 3 个与简单数学连接的textField
.. ( textField1 + textField2 = textField3 ) & ( textField1 - textField3 = textField2 )... 我需要更改textField3 的值并保持 textField2的值不变? 现在的情况是这样的 这是我的代码
@override
void initState() {
super.initState();
_focus.addListener(() {
if (_focus.hasFocus) {
_finalValue.clear();
}
});
_focuselocity.addListener(() {
if (_focuselocity.hasFocus) {
velocityEditingController.clear();
}
});
textEditingController.addListener(() => setState(() {}));
velocityEditingController.addListener(() => setState(() {
totalCalculated();
}));
_finalValue.addListener(() => setState(() {
totalCalculated();
}));
}
@override
void dispose() {
super.dispose();
velocityEditingController.removeListener(() {
totalCalculated();
});
textEditingController.removeListener(() {
totalCalculated();
});
_finalValue.removeListener(() {
totalCalculated();
});
}
String totalCalculated() {
airFlowText = textEditingController.text;
velocityText = velocityEditingController.text;
finalText = _finalValue.text;
if (airFlowText != '' && velocityText != '' && !_focus.hasFocus) {
sam = (int.parse(airFlowText) + int.parse(velocityText)).toString();
lastVelocityValue = velocityText;
_finalValue.value = _finalValue.value.copyWith(
text: sam.toString(),
);
}
if (airFlowText != '' && finalText != null && !_focuselocity.hasFocus) {
sam = (int.parse(airFlowText) - int.parse(finalText)).toString();
velocityEditingController.value =
velocityEditingController.value.copyWith(
text: sam.toString(),
);
}
return sam;
}
为了删除监听器,您必须提供该 function 的确切实例。 在您的代码中,您每次都在创建新函数,因此 Dart 并没有真正看到这些是“相等的”。
确保您使用相同实例的最简单方法是将 function 作为 state 方法。
void _onVelocityChanged() {
setState(() {
totalCalculated();
});
}
@override
void initState() {
super.initState();
velocityEditingController.addListener(_onVelocityChanged);
// ...
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
velocityEditingController.removeListener(_onVelocityChanged);
}
另请注意,您应该在 TextEditingControllers 上调用dispose
,而不是在dispose
上删除侦听器,这可以有效地删除侦听器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.