首页 > 解决方案 > 为什么 TextEditingController 总是在有状态的小部件中使用?

问题描述

在阅读 Flutter 文档时,我看到了这篇文章,它展示了如何处理对文本字段的更改。我发现有趣的是,在这篇文章和所有其他关于TextEditingController的文章中,TextEditingController总是在有状态的小部件中使用,无论该小部件是否需要有状态。

TextEditingController总是与有状态小部件一起使用的原因是什么?

标签: flutterdartflutter-layout

解决方案


长答案短

您需要处理您的TextEditingControllerin State.dispose

TextEditingController textEditingController;

@override
void dispose() {
  textEditingController.dispose(); // You need to do this.

  super.dispose();
}

解释

ATextEditingController是一个ChangeNotifierasTextEditingController继承自ValueNotifierValueNotifierextends ChangeNotifier

话虽如此,为了不泄漏任何资源,TextEditingController需要对 s 进行处理。
任何时候你想要处理一些东西,你都会想要使用StatefulElement.unmount. 这是通过State和 with that暴露出来的StatefulWidget。有关如何实现这一点,请参见上文。


理想情况下,您将在以下位置设置控制器initState

@override
void initState() {
  super.initState();

  textEditingController = ..;
}

推荐阅读