【问题标题】:TextField loses value after interacting with TextEditingController与 TextEditingController 交互后 TextField 失去价值
【发布时间】:2019-06-15 18:59:33
【问题描述】:

当我将 TextEditingController 添加到我的 TextFormField 时,文本字段的值会在与它交互后重置/删除。

在代码示例中,我删除了不必要的小部件(对于较短的问题):

Widget build(BuildContext context) {
final usernameTextEditController = TextEditingController();
final passwordTextEditController = TextEditingController();
final confirmPasswordTextEditController = TextEditingController();
//...
                TextFormField(
                  validator: InputValidator.inputUsernameValidate,
                  controller: usernameTextEditController,
                  decoration: InputDecoration(
                    labelText: 'Your user name.',
                  ),
                ),

                TextFormField(
                  controller: passwordTextEditController,
                  validator: InputValidator.inputPasswordValidate,
                  decoration: InputDecoration(
                    labelText: 'Your password',
                  ),
                  obscureText: true,
                ),

                TextFormField(
                  controller: confirmPasswordTextEditController,
                  validator: InputValidator.inputPasswordValidate,
                  decoration: InputDecoration(
                    labelText: 'Confirm Password',
                  ),
                  obscureText: true,
                ),


//...
  }

【问题讨论】:

  • 将此代码final usernameTextEditController = TextEditingController(); 移出build()。每次 Flutter 更新视图时,都会创建一个具有默认值的新控制器。

标签: dart flutter


【解决方案1】:

您的变量在 build()-Function 中,这个函数会被频繁调用,因此您的变量会一次又一次地初始化(=“重置”)

将它们移至 build()-Function 所在的类,应该可以解决该问题。

有关 build() 以及调用它的原因和时间的详细信息,请参阅文档。 build method

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    相关资源
    最近更新 更多