首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在颤动中动态setState变量?

如何在颤动中动态setState变量?
EN

Stack Overflow用户
提问于 2019-04-10 12:29:23
回答 2查看 5K关注 0票数 1

我刚刚开始学习flutter,我很好奇如何在flutter中动态地setState()

React Native中,我通常会使用下面这样的函数来动态setState

代码语言:javascript
复制
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中尝试过了,但似乎不起作用

代码语言:javascript
复制
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'
    ),
  ),
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-10 14:39:57

经过一些研究和尝试,我可以用下面的代码实现我想要的:

代码语言:javascript
复制
class _LoginFormState extends State<LoginForm> {
  String username, password;
  //create an object
  var loginForm = {};
  final myController = TextEditingController();

  void ToogleState(typedata, text){
    setState(() {
      //i can assign any different variable with this code
      loginForm[typedata] = text;
      //output of LoginForm: {username: foo, password: bar}
    });
  }

  //widget
  Padding(
    padding: const EdgeInsets.all(16.0),
    child: Column(
      children: <Widget>[
        TextField(
          onEditingComplete: (){print(loginForm);},
          onChanged: (text){ToogleState("username", text); print(loginForm['username']);},
          decoration: InputDecoration(
            hintText: 'input username', labelText: 'Username'
          ),
        ),
        TextField(
          onEditingComplete: (){print(loginForm);},
          onChanged: (text){ToogleState("password", text); print(loginForm['password']);},
          decoration: InputDecoration(
            hintText: 'input password', labelText: 'Password'
          ),
        ),
      ],
    ),
  );
}
票数 3
EN

Stack Overflow用户

发布于 2019-04-10 12:44:28

你只需要创建一个变量来保存这个值。我搞不懂为什么在不修改短暂状态的情况下还要调用setState

下面是一些有用的文档https://flutter.dev/docs/development/data-and-backend/state-mgmt/ephemeral-vs-app

代码语言:javascript
复制
class _LoginFormState extends State<LoginForm> {
  String _username = "";
  String __password = "";
  void ToogleState( text){
    setState(() {
      _username = text;
    });
  }

  //Widget
  TextField(
    onChanged: (text){ToogleState( text); print(username);},
    decoration: InputDecoration(
      hintText: 'input username', labelText: 'Username'
    ),
  ),
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55604751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档