flutter - 为什么 TextEditingController 总是在有状态的小部件中使用?
问题描述
在阅读 Flutter 文档时,我看到了这篇文章,它展示了如何处理对文本字段的更改。我发现有趣的是,在这篇文章和所有其他关于TextEditingController
的文章中,TextEditingController
总是在有状态的小部件中使用,无论该小部件是否需要有状态。
TextEditingController
总是与有状态小部件一起使用的原因是什么?
解决方案
长答案短
您需要处理您的TextEditingController
in State.dispose
:
TextEditingController textEditingController;
@override
void dispose() {
textEditingController.dispose(); // You need to do this.
super.dispose();
}
解释
ATextEditingController
是一个ChangeNotifier
asTextEditingController
继承自ValueNotifier
和ValueNotifier
extends ChangeNotifier
。
话虽如此,为了不泄漏任何资源,TextEditingController
需要对 s 进行处理。
任何时候你想要处理一些东西,你都会想要使用StatefulElement.unmount
. 这是通过State
和 with that暴露出来的StatefulWidget
。有关如何实现这一点,请参见上文。
理想情况下,您将在以下位置设置控制器initState
:
@override
void initState() {
super.initState();
textEditingController = ..;
}
推荐阅读
- soap - Java,反射将字段转换为 JAXBElement
- java - iText writeSelectedRows 没有做任何事情
- java - 如何在 MySQL 数据源中设置 jdbc ClientInfo
- google-bigquery - BigQuery 自动检测不适用于不一致的 json?
- html - 无限水平 css 动画删除初始填充
- excel - 尝试将 excel 文件加载到 ms-access 中,其中文本字段包含 @ 符号
- java - 如何在 Java 应用程序中使用 Android Studio 连接到在线服务器?(API 28)
- c++ - 可变参数模板:左值与右值引用
- c++ - 带有 IncludeIsMainRegex 的 clang 格式的 git 过滤器
- ruby-on-rails - RoR:ActiveRecord::RecordInvalid:验证失败:参加者必须存在