发布
社区首页 >问答首页 >在构建方法中与字段变量相比,颤振更新状态如何?

在构建方法中与字段变量相比,颤振更新状态如何?
EN

Stack Overflow用户
提问于 2022-05-11 18:54:37
回答 1查看 139关注 0票数 1

我有一个无状态的widget,其中有一个textfield,现在我将textfield的onChanged值存储在变量String? newValue;中,因为它是一个无状态的小部件,我必须将它标记为final,但是如果它被标记为final,那么我就不能使用它作为一个设置器来做,

代码语言:javascript
代码运行次数:0
复制
onChanged: (value) {
  newValue = value;
}  

我所做的就是把它放在build()方法中,所以

代码语言:javascript
代码运行次数:0
复制
Widget build(BuildContext context) {
  String? newValue;
return Container();
}  

现在我可以用它作为一个策划人,或者所以我觉得他们骗了我.当我在newValue中打印onChanged的值时,它实际上是在收集值,但是当用户提交或单击键盘时,newValue的值返回到默认值'null',当我使类有状态时,可以很容易地将newValue作为字段变量放置,而且一切正常,无论我做什么,它都不默认为默认值,

所以我的问题是,为什么在build()方法中存储变量时会发生这种情况,而不是当我将其存储为类字段变量时,有人可以告诉我这是如何工作的,为什么它默认为初始值,并且不管怎么解决它,而不必更改为有状态小部件并使其成为字段变量。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-11 19:23:31

不能在build方法中存储状态的原因是,在函数(或在任何块范围内)中声明的任何变量的作用域都是该块。因此,当再次调用build方法来重新呈现您的小部件时,变量将在函数开始时再次初始化,并在函数返回时超出范围,这将发生在每次构建时。*

这正是StatefulWidgetState<T>解决的问题--通过在实例上将变量存储为可变属性,这些变量可用于后续对build的调用,并在对build的调用之间保持不变。

* --在本例中--由于您的onChanged回调引用它,所以变量仍然在附近徘徊,这就是为什么您仍然可以打印它的原因;但是,它的值对后续对build的调用没有任何影响。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72206233

复制
相关文章

相似问题

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