flutter - 为什么单击 TextFormField 会触发 didUpdateWidget()?
问题描述
我遇到了一个问题。在我页面的一个部分中,我与今天的日期有一个约会。如果用户单击右侧的箭头,则前进一个日期,如果他们单击左侧的箭头,则返回一个日期。在我使用 setState 的箭头按钮上。日期变化很好。
我在下面的另一张卡片上也有一张表格。我为每个 textFormField 设置了一个控制器。我必须设置这些,因为 initialvalue: 只被调用一次,所以字段永远不会随着日期而改变。
无论如何,这些字段现在会随着日期而变化,而且是正确的。但是当我点击表格的那一刻,顶部的小部件日期又回到了它的初始值?
我通过设置 didUpdateWidget 覆盖检查了这一点,每次单击表单字段时都会触发???为什么会这样。我还没有更新任何东西。
当我将控制器用于显示在两个箭头之间的日期值时,它不会改变,但是当我点击提交时,它应该分配的值是错误的(出现的第一个日期)。所以看起来当 didUpdate 触发时它正在设置我在我的扩展 StatefulWidget 类{}中设置的那个字段。
编辑:哇,输入最后一句话让我意识到我需要在扩展 State<> 的底层类中设置值。我将它与 widget.activeDay 一起使用。
我想我仍然很好奇为什么文本表单字段会发生这种情况?
解决方案
单击文本字段会打开键盘。
这会改变屏幕尺寸并导致MaterialApp
重建路线。
路线重建最终会调用didUpdateWidget
该特定小部件。
推荐阅读
- javascript - 单击也具有可单击事件的 div 下方的链接
- python - 具有多级列的 Pandas 数据框:重命名特定级别的列,使其与另一个级别相同
- regex - Typescrpt 正则表达式提取 x,y 位置
- automata - 自动机和可计算性
- c# - 完全递归爬虫不起作用。只有 2-3 个页面爬取深度
- node.js - create-react-app 后无法启动项目:错误:找不到模块“C:\Users\pcname\Documents\react-scripts\bin\react-scripts.js”
- mysql - 仅当子表中的外键在父表中具有分配给它的值时,才在子表中创建条目
- javascript - 如何使用按键阻止我的形状移动?
- json - 如何使用 Dart 中属性名称的枚举将 JSON 映射到对象
- xamarin.ios - 导航控制器设置为空,使用 UITabBarController