【问题标题】:using TextEditingController more than once多次使用 TextEditingController
【发布时间】:2019-10-13 00:09:01
【问题描述】:

我是否必须为每个 TextField 创建多个 TextEditingController 例子

var oneController = TextEditingController();
var twoController = TextEditingController();

然后

TextField(
   controller: oneController,
   decoration: new InputDecoration(labelText: "add type *income"),
),
TextField(
   controller: twoController,
   decoration: new InputDecoration(labelText: "Enter a number"),
   keyboardType: TextInputType.number,
),

或者有没有办法只使用一个?

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    我是否必须为每个TextField 创建多个TextEditingController

    是的。控制器允许您控制和访问该字段的当前状态,

    在这种情况下,它可以让您知道当前用户输入的内容,因此您可以读取或更改该值,并允许您选择或查看用户选择的内容。它还可以为每个字段提供一个初始值。

    如果你使用同一个控制器,同样的事情会同时发生在两个 TextField 中,例如,当用户在一个字段上键入一个字母时,它也会显示在另一个字段上。

    如果您有一个表单或太多字段,您可能想要使用其他解决方案,例如 TextFormField,它也可以在没有控制器的情况下使用,以一次性验证和保存用户输入,用于 @987654322 中的多个字段@小部件。

    更多关于TextEditingControlleron the docs

    【讨论】:

    • 很高兴帮助 :) @MrKale
    • 您好!只是想知道是否有任何文档可以在没有控制器的情况下使用 TextFormField 来为表单小部件内的多个字段一次验证和保存用户输入。
    • @Gene 我相信你可以在这里找到它。但这里有一些信息:TextFormField 有参数 onSaved 和验证器。 FormState 有一个方法 validate()。当用户按下提交按钮时,您在表单上调用 validate(),它将执行验证器。如果每个字段都通过,它将调用 onSaved,它应该将字段的值写入您选择的变量,可能是对象的属性。我在这里实现了这个,以check this code 为例。
    【解决方案2】:

    您可以使用与此类似的东西。然后只需将它们像数组一样使用在任何你想要的地方。

    List<TextEditingController> myController =
          List.generate(5, (i) => TextEditingController());
    

    【讨论】:

    • 接下来呢?我对每一个都做了.addListener(),但是在侦听器方法中,无法区分事件来自哪个控制器
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 2021-08-03
    • 2020-10-31
    • 2019-11-16
    • 2021-08-06
    • 2021-06-29
    相关资源
    最近更新 更多