flutter 为什么我们需要在setState中为onChanged赋值,如果我直接赋值会发生什么

3zwtqj6y  于 2023-04-22  发布在  Flutter
关注(0)|答案(3)|浏览(161)

我是新的Flutter,并试图更好地理解它。

FormFieldText(
                  label: "First Name",
                  initialValue:firstName,
                  validator: (value) {
                    if (value.isEmpty) return "Name must be provided";
                    return null;
                  },
                  onChanged: ((value) {
                    setState(() {
                      member?.firstName = value;
                    });
                  }),
                ),
bf1o4zei

bf1o4zei1#

使用函数setState强制ui重新构建,这将在屏幕上显示更改,但不使用它什么也做不了

bakd9h0s

bakd9h0s2#

如果你想改变你的屏幕上的东西与该值,你应该把它放在设置状态,然后用户可以看到每一个变化,它是可用的在搜索栏,每一个字,你键入将搜索数据库和显示结果.但如果你不使用设置状态在更改,UI不显示任何东西,直到你刷新页面.如果你不想显示每一个输入的变化,您可以使用控制器并保存值与一个按钮在最后.

h43kikqp

h43kikqp3#

你可以直接赋值而不需要setState(),但是如果你不想在用户输入时显示文本或运行/回调函数,那么你根本不需要使用onChanged属性。
如果你需要构建一个不断监听用户输入的功能,这个属性会更有用。每当用户在表单域中输入一个新字符时,它都会回调一个函数。
在上面的示例中,您的功能是删除变量member?.firstName,并在用户每次输入内容时将其替换为新值。例如,这对于在用户输入时显示预览非常有用。您只需要在屏幕的某个位置显示一个文本小部件,如Text (member?.firstName.toString)。它将直观地显示与用户输入的1乘1相同的字母。
onChanged属性对于像search这样的函数很有用,在这里你可以在用户输入的时候显示建议。另一个例子是像200/2000 words这样显示字符的数量,让用户知道在达到最大值之前他还剩下多少字符。

相关问题