【问题标题】:Is there an easy way to get the initialvalue in a textformfield in a variable?有没有一种简单的方法可以在变量的 textformfield 中获取初始值?
【发布时间】:2019-04-05 12:15:31
【问题描述】:

我刚开始使用颤振,我正在制作个人资料页面,并且正在提出请求。我正在尝试创建一个编辑配置文件页面,所以每当我去那里时,textformfield 的值都已经填写完毕。起初我认为使用占位符作为初始值会很好。但我在想,这对用户体验不利。我宁愿让 textformfields 填写正确的数据。因此,如果用户想要更新他的信息,则填写这些字段。我正在发出一个 http 发布请求,并且我得到了正确的值。但是我没有得到的奇怪的事情是为什么我可以在标签文本中加载变量但我不能在初始值中加载它们......

我试图寻找一个解决方案,并且我尝试了一个 futurebuilder,但我无法让它工作。我希望有人可以帮助我。

   Expanded(
                                child: Container(
                                  child: new TextFormField(
                                    onSaved: (input) => _voornaam = input,
                                    initialValue: '$voornaam',
                                    decoration: InputDecoration(
                                        labelText: '$voornaam'),
                                    style: TextStyle(
                                        fontSize: 16.0,
                                        fontWeight: FontWeight.bold),
                                  ),
                                ),
                                flex: 2,
                              ),        

我希望在我的文本表单字段中获得 $voornaam 的值。但实际上,当我加载它时,它只是返回 null。我的 http 请求正在运行,因为该值已放入标签文本中。如果有人

【问题讨论】:

    标签: http dart flutter


    【解决方案1】:

    controller 添加到您的 TextFormField 并在 initState 中将其初始化为初始值 - _controller = TextEditingController(text: $voornaam);

    【讨论】:

    • 这是我需要的方式。您知道是否有一种方法可以将 1 个控制器用于多个不同的初始值?无论如何,谢谢,希望我能收到你的来信。
    • 您应该为不同的TextFormFields 使用不同的控制器,我会说只有在提交或保存字段时才处理控制器值是一个好习惯。 PS - 不要忘记处理你的控制器。
    • 非常感谢您的快速回复,我将尝试并练习以这种方式处理控制器。但是我必须提出一个编辑请求,以便用户可以发送他的数据,如果他只想添加 1 个字母或其他内容,则不必再次输入他的值。
    • 您应该可以使用controller 轻松做到这一点 :) 此外,您可以使用启用标志来启用/禁用编辑。
    【解决方案2】:

    你有一个错字,这段代码应该可以工作:

    
    void main() => runApp(MaterialApp(
          home: App(),
        ));
    
    class App extends StatefulWidget {
      @override
      _AppState createState() => _AppState();
    }
    
    class _AppState extends State<App> {
      String _voornaam = 'Helo';
    
      @override
      void initState() {
        super.initState();
        // set you _voornaam value
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('text'),
          ),
          body: Container(
            child: new TextFormField(
              onSaved: (input) => setState(() {
                    _voornaam = input;
                  }),
              initialValue: '$_voornaam',
              decoration: InputDecoration(labelText: '$_voornaam'),
              style: TextStyle(fontSize: 16.0, fontWeight: FontWeight.bold),
            ),
          ),
        );
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      • 1970-01-01
      • 2017-07-05
      • 2011-01-15
      • 2011-04-20
      • 2014-01-22
      相关资源
      最近更新 更多