首页 > 解决方案 > 为什么单击 TextFormField 会触发 didUpdateWidget()?

问题描述

我遇到了一个问题。在我页面的一个部分中,我与今天的日期有一个约会。如果用户单击右侧的箭头,则前进一个日期,如果他们单击左侧的箭头,则返回一个日期。在我使用 setState 的箭头按钮上。日期变化很好。

我在下面的另一张卡片上也有一张表格。我为每个 textFormField 设置了一个控制器。我必须设置这些,因为 initialvalue: 只被调用一次,所以字段永远不会随着日期而改变。

无论如何,这些字段现在会随着日期而变化,而且是正确的。但是当我点击表格的那一刻,顶部的小部件日期又回到了它的初始值?

我通过设置 didUpdateWidget 覆盖检查了这一点,每次单击表单字段时都会触发???为什么会这样。我还没有更新任何东西。

当我将控制器用于显示在两个箭头之间的日期值时,它不会改变,但是当我点击提交时,它应该分配的值是错误的(出现的第一个日期)。所以看起来当 didUpdate 触发时它正在设置我在我的扩展 StatefulWidget 类{}中设置的那个字段。

编辑:哇,输入最后一句话让我意识到我需要在扩展 State<> 的底层类中设置值。我将它与 widget.activeDay 一起使用。

我想我仍然很好奇为什么文本表单字段会发生这种情况?

标签: flutter

解决方案


单击文本字段会打开键盘。

这会改变屏幕尺寸并导致MaterialApp重建路线。

路线重建最终会调用didUpdateWidget该特定小部件。


推荐阅读