如何在不调用setstate的情况下更新类变量?



如何在不使用setState((){})的情况下获得TextFormField的更新值?

TextFormFieldonChanged方法上,我将类变量设置为值,但通常我们需要setState((){})来更新值。我只是想知道这是如何工作的?

class ResetPasswordPage extends StatefulWidget {
const ResetPasswordPage({ Key? key }) : super(key: key);
@override
_ResetPasswordPageState createState() => _ResetPasswordPageState();
}
class _ResetPasswordPageState extends State<ResetPasswordPage> {
String _currentPassword = '';
void onChanged(){
print('current Password is: ');
print(_currentPassword); ----------->this is printing the updated value, without setstate?
}

@override
Widget build(BuildContext context) {
return Container(
TextFormField(
onChanged: (val) => {
_currentPassword = val,
onChanged()
},
),
)
}

}

不需要使用setState就可以改变变量值,setState只需要告诉Flutter UI必须改变以反映数据的变化。

From Flutter docs:

调用setState通知框架该对象的内部状态发生了变化,这种变化可能会影响子树中的用户界面,从而导致框架为该状态对象调度构建。

您可以创建通知器->监听器,然后将监听器设置为监听通知器,这样在通知器(控制器)上的任何更新都会通知监听器(TextFormField)来更新自己。

:

final _controller = TextEditingController();
child: TextFormField(
controller: _controller,
decoration: //decoration,
),

当你调用这个_controller.text它会通知所有需要更新的TextEditingController的监听器,然后你会得到setState((){})给你的相同结果。

最新更新