【发布时间】:2019-08-31 10:50:38
【问题描述】:
刚开始学flutter,很好奇怎么在flutter中动态setState()
在React Native中,我通常使用这样的函数来动态地setState:
class foo extends React.Component{
state={
username:null,
password:null
}
toggleSetState(whatState, value){
this.setState({ [whatState]: value })
}
render() {
return (
<View>
<TextInput
value={this.state.username}
onChangeText={(text)=>{toggleSetState(username, text)}
/>
<TextInput
value={this.state.password}
onChangeText={(text)=>{toggleSetState(password, text)}
/>
</View>
);
}
}
Flutter 中上述代码的等效项是什么?
我已经在Flutter 中尝试过,但它似乎不起作用
class _LoginFormState extends State<LoginForm> {
String username, password;
void ToogleState(typedata, text){
setState(() {
typedata = text;
});
}
//Widget
TextField(
onChanged: (text){ToogleState(username, text); print(username);},
decoration: InputDecoration(
hintText: 'input username', labelText: 'Username'
),
),
}
【问题讨论】:
-
setState用于状态更改,这会更改用户界面,例如获取数据然后将其渲染到小部件中。在您的情况下,TextField 已经处理了大部分视觉更改,因此您不需要调用setState。 Flutter 不是 Reactjs。 -
@user1462442 这只是一个简单的案例,我以 TextField 为例,如果有一天您遇到复杂案例的相同问题并需要这样处理,您怎么看?例如来自 API 的动态表单,并回传到服务器
-
使用
initState和期货 dartlang.org/tutorials/language/futures docs.flutter.io/flutter/widgets/State/initState.html 没有那么复杂