EditingTextController无需调用setState()即可更新小部件值-Flutter

时间:2019-09-27 21:35:23

标签: flutter dart

这可能不是技术问题,但是我读到,每当您想要更改 StatefullWidget 状态时,都需要调用 setState()函数。我对 EditText()小部件进行了测试,并使用 EditingTextController 作为小部件控制器,我从用户定义的函数调用了controller.text = "some text",而没有调用{{1} }函数,并且 EditText()的值更改为一些文本

我想知道这是怎么做的?我阅读了文档,并说setState()会更改小部件的值,但我们已经知道为了更改 状态完整的小部件状态下,您需要致电EditingTextController

1 个答案:

答案 0 :(得分:0)

这是真的。但是要更改Flutter中的状态,您还有其他选择,setState(() {});只是其中之一。另一个选择是创建Notifier -> listener,然后将侦听器设置为侦听通告程序,例如TextFormField(controller: _controller,...) ,以便通告程序(控制器)上的任何更新都将通知侦听器(TextFormField)进行更新本身。

例如:

//...
final _controller = TextEditingController();
//...
child: TextFormField(
    controller: _controller,
    decoration: InputDecoration(border: OutlineInputBorder()),
),

在此示例中:

  • _controller :是一个ChangeNotifier。
  • TextFormField :是此ChangeNotifier(_controller)的侦听器。

,一旦您将此_controller.text=..称为_controller(被视为 ChangeNotifier see this。) ”将通知此TextEditingController的所有侦听器他们需要更新” ,因此它会为您提供与使用setState(() {});Stream/StreamBuilderFuture/FutureBuilder ...等相同的结果。