这可能不是技术问题,但是我读到,每当您想要更改 StatefullWidget 状态时,都需要调用 setState()函数。我对 EditText()小部件进行了测试,并使用 EditingTextController 作为小部件控制器,我从用户定义的函数调用了controller.text = "some text"
,而没有调用{{1} }函数,并且 EditText()的值更改为一些文本!
我想知道这是怎么做的?我阅读了文档,并说setState()
会更改小部件的值,但我们已经知道为了更改
状态完整的小部件状态下,您需要致电EditingTextController
答案 0 :(得分:0)
这是真的。但是要更改Flutter中的状态,您还有其他选择,setState(() {});
只是其中之一。另一个选择是创建Notifier -> listener
,然后将侦听器设置为侦听通告程序,例如TextFormField(controller: _controller,...)
,以便通告程序(控制器)上的任何更新都将通知侦听器(TextFormField)进行更新本身。
例如:
//...
final _controller = TextEditingController();
//...
child: TextFormField(
controller: _controller,
decoration: InputDecoration(border: OutlineInputBorder()),
),
在此示例中:
,一旦您将此_controller.text=..
称为_controller(被视为 ChangeNotifier see this。) ”将通知此TextEditingController的所有侦听器他们需要更新” ,因此它会为您提供与使用setState(() {});
或Stream/StreamBuilder
或Future/FutureBuilder
...等相同的结果。