flutter - 使用 TextEditingController 和 StreamBuilder 时文本被清除
问题描述
我在使用TextEditingController
和FocusNode
结合时观察到一些奇怪的行为StreamBuilder
,即:
Text
TextField
在取消选择文本字段时清除内部- 两个输入插入符号在两个单独的文本字段上同时处于活动状态
当满足以下所有条件时,就会发生这种情况:
- 无状态小部件创建自己的
TextEditingControllers
和FocusNodes
. - 这些在一些
TextField
小部件中使用。 - 无状态小部件的 build 方法返回 a ,当新值被推送到流时
StreamBuilder
,它会重建小部件内容(包括)。TextFields
- 无状态小部件显示为 MaterialPageRoute。
注意:如果无状态小部件未呈现,而是在应用启动时直接呈现,则不会出现问题。
解决方案
问题出在我头上。问题是我在StatelessWidget
.
你不应该。
打开键盘往往会重建整个屏幕(这很好)。但在我的情况下,重建会导致您TextEditingController
被 GCed,因为您将它们存储在StatelessWidget
所以这个工作的原因StatefulWidget
是即使在重建过程中也会保留状态,所以我可以用它来保存我的TextEditingControllers
.
推荐阅读
- java - 按下按钮时如何在Java中销毁CoundownTimer?
- sql - 在 SQL (ORACLE) 上组合和检查表值
- c# - Asp .Net Core 单元测试模拟 UserManager.CreateAsync 并返回身份结果
- sql-server - 如何将多个表中的属性分组到一个表中
- php - 来自 mysql 的 Echo SUM
- arrays - 如何从带有条件的 React Native 中的 API 数组结果中获取记录?
- reactjs - React import .css 根据 process.env.REACT_APP_THEME
- matlab - 如何组合来自不同矩阵的行
- camunda - 历史外部任务日志
- reactjs - ReactJS - 使用 React Hooks 去抖动 - 引发我无法解决的错误。解析错误